javascript - 数组不在 for 循环中存储值

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

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

这是怎么回事?有一些 javascript 作用域规则吗?这适用于其他语言。谢谢!

最佳答案

我认为你需要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 循环内部而不是在其顶部声明 a1

关于javascript - 数组不在 for 循环中存储值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25067346/

相关文章:

javascript - 数据表 : Disable drag and drop table columns

javascript - Vue.js:循环对象时类绑定(bind)不起作用

javascript - 如何使用 javascript 将时间从 24 小时格式转换为 12 小时格式?

ruby-on-rails - ruby /rails : get elements from array where indices are divisible by x

javascript - 图像的响应式空白图像叠加

javascript - Angular 5 中的 HostListener 滚动测试

c - 为什么我的数组在作为参数传递时被删除?

javascript - 从多个字符串中仅保留一个字符串 - 数组

java - 检测数组中的所有突然变化

c++ - 在cpp中对象初始化后设置数组的边界