Javascript 数组未在for循环中存储值
我解析一个json对象并将所需的值存储在一个数组中,然后将每个数组推入for循环中的第二个数组,以创建一个数组,其中a2中的每个元素都是a1 我已经正确地获取并解析了jsonJavascript 数组未在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;
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);