Javascript 数组未在for循环中存储值

Javascript 数组未在for循环中存储值,javascript,arrays,Javascript,Arrays,我解析一个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;

我解析一个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.loga2打印a2数组,其中包含每个索引的最后a1值:

[["2014-01-03", "Mike"],
["2014-01-03", "Mike"],
["2014-01-03", "Mike"]]
我还尝试将a1分配给for循环中a2的每个索引,而不是使用.push,例如:

我想要嵌套数组或二维数组,但为什么每个元素都相同


这是怎么回事?是否有一些javascript范围规则?这适用于其他语言。谢谢

每次循环时,都会修改a1引用的现有数组,然后将对它的引用推送到a2引用的数组中

这意味着您将得到对同一数组的多个引用

您需要创建一个新的数组来推送每组数据

移动var a1=[];在回路内部。

我认为您需要a2.1;不是a2.a2;内循环

或者试试这个:

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循环内部声明a1,而不是在其顶部声明a1。

a1是数组对象的引用,而for循环正在不断更改对象值

您需要先将a1值复制到某个变量,然后将该变量推送到a2

尝试:


}

那是个打字错误。很抱歉我有a2.A1
a2[i] = a1;
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]);
}
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);