Javascript - 在循环中构建数组

时间:2015-03-03 21:11:57

标签: javascript arrays for-loop

我试图从JSON Feed中填充数组。我的代码看起来像这样:

// multiple arrays
var linje_1 = []
var linje_2 = []

// loop from json feed to populate array

for( var i = 0; i < data.length; i++) {
    // I'm trying to "build" the array here. I know for sure that data[i] is good value that match the suffix of the array.
    arrayname = 'linje_'+data[i]; 
    arrayname.push({ label: data[i].x_+''+sid[a]+'', y: data[i].y_+''+sid[a]+'' })
}

有人对如何解决上述问题有任何建议吗?

问题是代码不接受arrayname,但如果我更改并硬编码linje_1,则一切都按预期工作。

3 个答案:

答案 0 :(得分:3)

定义变量arrayname = 'linje_'+data[i];时,其类型为String。字符串不是数组,你不能像数组那样对待它们,它们没有数组方法。

如果要动态构造变量的名称,最好的办法是使用对象及其键:

var lines = {
    linje_1: [],
    linje_2: []
};

for (var i = 0; i < data.length; i++) {
    var arrayname = 'linje_' + data[i]; 
    lines[arrayname].push({ label: data[i].x_ + sid[a], y: data[i].y_ + sid[a]});
}

另请注意,我稍微清理了一些代码(例如data[i].x_ + '' + sid[a] + '')。

答案 1 :(得分:0)

您将数据推送到String而不是数组。试试这个:

 window[arrayname].push(/* ... */);

如果您的变量在窗口范围内声明,则可以多种方式引用它们:

myArray
window.myArray
window['myArray'] // You want this one

答案 2 :(得分:0)

您对数组和字符串使用相同的变量。

arrayname = 'linje_'+data[i]; 
arrayname.push({ label: data[i].x_+''+sid[a]+'', y: data[i].y_+''+sid[a]+'' })

变量arrayname被定义为一个字符串,但是你调用push方法只是一种数组方法。