我试图从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
,则一切都按预期工作。
答案 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
方法只是一种数组方法。