数组不在for循环中存储值

时间:2014-07-31 19:27:29

标签: 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;

   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的范围规则?这适用于其他语言。谢谢!

3 个答案:

答案 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);

}

相关问题