拆分 csv 行并转换数值(Typescript、Javascript)

Posted

技术标签:

【中文标题】拆分 csv 行并转换数值(Typescript、Javascript)【英文标题】:Split csv row and convert numeric values (Typescript, Javascript) 【发布时间】:2020-09-23 02:14:02 【问题描述】:

我正在尝试将 csv 文件行转换为数组,然后将数值从字符串转换。

这是我的 csv 文件行:

const row = "TEXT,2020-06-04 06:16:34.479 UTC,179,0.629323";

这是我的目标数组(最后两个没有字符串格式的数值):

["TEXT","2020-06-04 06:16:34.479 UTC",179,0.629323]

我尝试了三种不同的模式,但我没有得到目标结果。

尝试1:

const array1 = row.split(",");

结果:

["TEXT","2020-06-04 06:16:34.479 UTC","179","0.629323"]

尝试2:

const array2 = row.split(",");
for (let element in array3)
    array3[element] = +array3[element];

结果:

[null,null,179,0.629323]

尝试 3:

const array3 = row.split(",").map(x=>+x);

结果:

[null,null,179,0.629323]

有人可以帮我吗?

谢谢!

【问题讨论】:

【参考方案1】:

js中的inNan函数检查数字是否可以转换为数字。

试试下面的方法

const row = "TEXT,2020-06-04 06:16:34.479 UTC,179,0.629323";
const array1 = row.split(",");
const newArray = array1.map(value => toNumber(value))
console.log("newArray", newArray)

function toNumber(value) 
    if(isNaN(value) || value === "")
        return value
    else 
        if(value.indexOf(".") === -1)
            return parseInt(value)
        else
            return parseFloat(value)

另一种方法可以将值乘以 1。

let array = row.split(",").map(value => isNaN(value) ? value : value * 1);

【讨论】:

还有更多的方法可以实现这一点,例如如果您使用多个字符串 1 也将返回数字【参考方案2】:

使用isNaN()

const row = "TEXT,2020-06-04 06:16:34.479 UTC,179,0.629323";

const array = row.split(",").map(i => isNaN(i) ? i : +i)

console.log(array)

【讨论】:

以上是关于拆分 csv 行并转换数值(Typescript、Javascript)的主要内容,如果未能解决你的问题,请参考以下文章

如何在读取 CSV 文件时将字符串值转换为整数值?

将数据集/数据表转换为 CSV

从 CSV 中随机选择行并重复 X 次

如何在Typescript中把字母数字值转换为数值范围?

Python解析文件中的所有行并按文件夹结构拆分它们

如何从 .CSV 文件中删除不合适的行并使用 C# 再次保存该文件?