0

私はこの男たちの周りに私の頭を取得することはできません. AJAX経由で読み取ったCSVファイルがあり、返されたものから配列を作成しています。私の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);

各行に 1 つの配列を持つオブジェクトの代わりに、csv ファイルの最後の行をすべて含む 4 つの配列があります。ネストされた for ループは適切に完了し、テーブル オブジェクトに入力する前に alert(line) を実行すると、現在の行配列が正しく返されますが、その配列はオブジェクト行に割り当てられません。

欲しいところ

 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.}

何か案は?ループ全体でそれらをすべて正しく割り当てているように感じますが、最後の実行では、それらをすべて間違って割り当て、正しいものを上書きしています。

4

1 に答える 1