我无法理解这一个人。我有一个CSV文件,我通过AJAX读取,我正在从返回的内容创建一个数组。我的CSV文件如下所示:
ID,name,address
0,john,123 fake st
1,bruce,123 fake st
2,john,124 fake st
3,fred,125 fake st
4,barry,126 fake st
我通过ajax函数调用它:
if (window.XMLHttpRequest) {
var ajax = new XMLHttpRequest();
} else var ajax = new ActiveXObject("Microsoft.XMLHTTP");
function include(src) {
ajax.open('GET', src, false);
ajax.send(null);
return ajax.responseText;
}
并像这样循环:
var bsf = include('csv.csv');
// construct an array from the first line of the file
// and use that array to name the keys in all further arrays
var cols = bsf.split('\r\n');
var ln1 = cols[0].split(',');
// pull out each line from bsf and turn it into an array
var line = [];
var table = {};
var curRow = [];
for (i = 1; i < cols.length; i++) { // i = 1 so we can skip the 'title' csv line
curRow = cols[i].split(',');
for (j = 0; j < curRow.length; j++) {
line[ln1[j]] = curRow[j];
}
table[curRow[0]] = line;
}
console.dir(table);
我有4个数组,它们都包含csv文件的最后一行,而不是每行有一个数组的对象。嵌套for循环正确完成,如果我在将其输入表对象之前发出警告(行),它会正确返回当前行数组,但仍然不会将该数组分配给对象行。
我想要的地方
table{
0: [id: 0, name: 'john', address: '123 fake st'],
1: [id: 1, name: 'bruce', address: '124 fake st'],
...}
我得到了
table{
4: [id: 4, name: 'barry', address: '126 fake st'],
4: [id: 4, name: 'barry', address: '126 fake st'],
etc.}
有什么想法吗?我感觉我在整个循环中正确地分配它们,但是在最后一次运行中,我正在错误地分配它们并覆盖正确的那些。
答案 0 :(得分:0)
您的问题是您只有一个line
数组,您可以一遍又一遍地重新填充:
for (j = 0; j < curRow.length; j++) {
line[ln1[j]] = curRow[j];
}
然后将line
数组添加到不同位置的table
:
table[curRow[0]] = line;
结果是table
中的每个条目都是cols
的最后一行。
您只需要将不同的数组放入table
,如下所示:
for (i = 1; i < cols.length; i++) {
line = [ ]; // <-------- This is the important part!
curRow = cols[i].split(',');
for (j = 0; j < curRow.length; j++) {
line[ln1[j]] = curRow[j];
}
table[curRow[0]] = line;
}