数组没有在for循环中存储值

Array not storing values in for loop

本文关键字:存储 循环 for 数组      更新时间:2023-09-26

我正在解析一个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;

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

这是怎么回事?有javascript的作用域规则吗?这在其他语言中也适用。谢谢!

我认为你需要a2.push(a1);而不是a2.push(a2); (in for-loop)

或者试试这个:

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引用的现有数组,然后将对它的引用推入a2引用的数组。

这意味着你最终会有对同一个数组的多个引用。

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

var a1 = [];移动到循环中

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

}