我正在解析一个json对象并将我想要的值存储在一个数组中,然后我将每个数组推入for循环内的第二个数组,以创建一个数组,其中a2
中的每个元素都是a1
我已经正确地解析了json。
var a1 = [];
var a2 = [];
for(i = 0; i < json.results.query.length; i++) {
var date = json.results.query[i].Date;
var name = json.results.query[i].Name;
a1[0] = date;
a1[1] = name;
console.log(a1);
a2.push(a1);
}
console.log(a2);
console.log(a1)
打印正确的数组,该数组会针对for循环的每次迭代而更改。例如:
["2014-01-01", "John"]
["2014-01-02", "Ann"]
["2014-01-03", "Mike"]
但console.log(a2)
打印a2
数组,其中包含每个索引的最后a1
个值:
[["2014-01-03", "Mike"],
["2014-01-03", "Mike"],
["2014-01-03", "Mike"]]
我还尝试将a1
分配给for循环内的a2
的每个索引,而不是使用.push()
,例如:
a2[i] = a1;
我想要嵌套(或2-d)数组,但为什么每个元素都相同?
这里发生了什么?是否有一些JavaScript的范围规则?这适用于其他语言。谢谢!
答案 0 :(得分:3)
我认为您需要a2.push(a1);
而不是a2.push(a2);
(在for循环中)
或试试这个:
for(i = 0; i < json.results.query.length; i++) {
var date = json.results.query[i].Date;
var name = json.results.query[i].Name;
a2.push([date, name]);
}
注意:首先,你应该在for-loop里面声明a1
NOT在它之外。
答案 1 :(得分:2)
每次循环时,您都会修改a1
引用的现有数组,然后将对它的引用推送到a2
引用的数组中。
这意味着您最终会对同一个数组进行多次引用。
您需要创建一个新数组来推送每组数据。
在循环中移动var a1 = [];
。
答案 2 :(得分:0)
a1是数组对象的引用,而for循环正在不断更改对象值。
首先需要将a1值复制到某个变量,然后将变量推送到a2。
尝试:
var a1 = [];
var a2 = [];
function pushToA2(a){
a2.push(a);
}
for(i = 0; i < json.results.query.length; i++) {
var date = json.results.query[i].Date;
var name = json.results.query[i].Name;
a1[0] = date;
a1[1] = name;
pushToA2(a1);
}