我正在尝试将CSV文件转换为javascript数组。
这是我的代码:
var segments = {
'Segment_1':'inves_cast',
'Segment_2':'foreged_prod',
'Segment_3':'air_prod',
'Segment_5':'worldwide',
'Segment_6':'structurals'
};
var divisions = {
'Division_1':'structurals',
'Division_2':'airfoils',
'Division_3':'wyman',
'Division_4':'energy',
'Division_5':'fasteners',
'Division_6':'struc_comp',
'Division_7':'mech_hard',
'Division_8':'engine_prod',
'Division_9':'corp',
'Division_10':'aero',
'Division_11':'timet',
'Division_12':'',
'Division_13':'spec_metals',
};
var csv = $.get('/path/to/locations.csv');
console.log(csv);
var locationArray = transformLocationData(csv);
function transformLocationData(obj) {
var lineArray = [];
if(obj && obj.data) {
var text = (data.responseText);
lines = text.split('\n');
for(var line in lines) {
var lineTokens = line.split(',');
lineArray = [
lineTokens[0],
lineTokens[1],
lineTokens[3],
lineTokens[4],
lineTokens[5],
lineTokens[6],
lineTokens[11],
lineTokens[12],
lineTokens[13],
lineTokens[14],
lineTokens[15],
segments['Segment_' + lineTokens[8]],
divisions['Division_' + lineTokens[9]]
];
}
}
console.log(lineArray);
}
所以我要做的是使用AJAX来获取csv文件然后拆分" responseText" 首先逐行第二次循环遍历这些行并用逗号分隔,然后根据这些行号创建一个数组。
使用最后一个控制台日志(console.log(lineArray);
)它会返回一个空数组,或者它只返回var lineArray = [];
中的数据,如果我用数据var lineArray = ["Lexus", "Audi", "BMW"];
填充它,它就是空的将返回该数组。
这是一个包含所有代码的plunker:https://plnkr.co/edit/CoZGfr6S9R5LDqR1drzq
我知道我做错了什么但似乎无法得到它。我不熟悉这样的事情,所以任何帮助都会受到高度赞赏。
答案 0 :(得分:2)
您每次都使用新阵列替换lineArray
,而您只是在循环的 end 处记录数组。也许CSV最后有一个空行。
如果您想要一个数组数组,请改为:
var lineArray = [];
if(obj && obj.data) {
var text = (data.responseText);
lines = text.split('\n');
for(line in lines) {
var lineTokens = line.split(',');
lineArray.push([
lineTokens[0],
lineTokens[1],
lineTokens[3],
lineTokens[4],
lineTokens[5],
lineTokens[6],
lineTokens[11],
lineTokens[12],
lineTokens[13],
lineTokens[14],
lineTokens[15],
segments['Segment_' + lineTokens[8]],
divisions['Division_' + lineTokens[9]]
]);
}
}
console.log(lineArray);
<强>更新强>:
此外,您还没有正确处理Ajax请求的结果。这一行:
var csv = $ .get(&#39; /path/to/locations.csv');
...不会返回CSV。相反,它返回一个Promise(有点......)。所以你不能那样解析csv
。相反,等待结果。将您的代码更改为:
$.get('/path/to/locations.csv').then(function (csv) {
var locationArray = transformLocationData(csv);
}, function (err) {
// Handle errors
});
正如@vlaz所提到的,您还希望将循环从for..in
更改为常规for
循环:
for (var i = 0; i < lines.length; i++) {
var line = lines[i];
// ...
}