【发布时间】:2019-02-15 01:39:44
【问题描述】:
我正在解析一个 csv 文件:
let lines = csvData.split(/\r\n|\n/);
let headers = lines[0].split(',');
for (let i = 1; i < lines.length; i++) {
let values = lines[i].split(',');
let item = {};
for (let j = 0; j < headers.length; j++) {
item[headers[j]] = values[j];
}
items.push(item);
}
return items;
我正在获取它的数据。但是,数据都是字符串。我想将它们传递给 JSON,并使它们没有类型,所以我可以将它们传递给不同类型的变量。我不想直接使用parseInt/parseFloat,因为我不知道每个变量的具体类型。
但是,每次我将值传递给 JSON 时,它们都是字符串,例如“1234”,而不是1234。通常我可以将JSON数据传递给没有类型的类,但是这次我将csvData转换为JSON,JSON数据都是字符串。我猜是因为 split 函数把它变成了一个字符串?
可选:
我可以将类型传递给这个函数,比如readCsvFile<T>(csvData),我可以这样做:
if (typeof(T[headers[j]]) == 'number') {
item[headers[j]] = parseFloat(values[j]);
} else {
item[headers[j]] = values[j];
}
但是 T[header[j]] 没有通过编译。
【问题讨论】:
-
"因为我不知道每个变量的具体类型。"好吧,您需要一种方法来找出,如果它是 CSV,那么每一列都引用一个您知道类型的字段。
-
我更新了代码的更多细节。我有办法知道类型,但我想让这个函数更通用。
-
那么,问题是什么? Javascript 是无类型的(打字稿也是,因为它只是一个超集)。如果您不想将它们转换为任何类型,只需分配它们,或者如果您希望它们全部为字符串,则将它们转换为字符串。但是,遵循@mpm 的提示会更有意义,因为您仍然需要稍后解析它们。
-
@DanielGale 更新了问题。它在每一列中都是相同的类型。我可以传入一个泛型类类型,如何检查每个属性的类型?
-
@briosheje 我认为它不应该是类型。但是,当我将值传递给一个类时,所有类型都将是字符串,即使属性类型是数字。
标签: javascript angular typescript csv