Javascript 将对象推入数组无法按预期工作
我的目标是创建如下数组:Javascript 将对象推入数组无法按预期工作,javascript,jquery,Javascript,Jquery,我的目标是创建如下数组: [{"str":"a","number":1},{"str":"a","number":2},{"str":"b","number":1},{"str":"b","number":2}] [{"str":"b","number":2},{"str":"b","number":2},{"str":"b","number":2},{"str":"b","number":2}] 所以我写了这个javascript abc = ["a","b"] num = [1,2] a
[{"str":"a","number":1},{"str":"a","number":2},{"str":"b","number":1},{"str":"b","number":2}]
[{"str":"b","number":2},{"str":"b","number":2},{"str":"b","number":2},{"str":"b","number":2}]
所以我写了这个javascript
abc = ["a","b"]
num = [1,2]
arr = []
a = {}
for (var i in abc)
{
str = abc[i]
a.str = str;
for(var x in num)
{
number = num[x]
a.number = number
console.log(a)
arr.push(a)
}
}
控制台日志看起来不错,但阵列如下所示:
[{"str":"a","number":1},{"str":"a","number":2},{"str":"b","number":1},{"str":"b","number":2}]
[{"str":"b","number":2},{"str":"b","number":2},{"str":"b","number":2},{"str":"b","number":2}]
任何人都能解释这一点吗?之所以会发生这种情况,是因为您实际使用的是对同一对象的引用,从而一次又一次地修改同一对象 要修复它,您必须在每次迭代中声明一个新对象,以使用不同的对象 试着这样做:
[{"str":"a","number":1},{"str":"a","number":2},{"str":"b","number":1},{"str":"b","number":2}]
[{"str":"b","number":2},{"str":"b","number":2},{"str":"b","number":2},{"str":"b","number":2}]
var abc=[“a”,“b”];
var num=[1,2];
var-arr=[];
用于(abc中的var i){
for(变量x在num中){
变量a={};
a、 str=abc[i];
a、 数字=num[x];
arr.push(a);
}
}
控制台日志(arr)代码>之所以发生这种情况,是因为您实际使用的是对同一对象的引用,因此会反复修改同一对象
要修复它,您必须在每次迭代中声明一个新对象,以使用不同的对象
试着这样做:
[{"str":"a","number":1},{"str":"a","number":2},{"str":"b","number":1},{"str":"b","number":2}]
[{"str":"b","number":2},{"str":"b","number":2},{"str":"b","number":2},{"str":"b","number":2}]
var abc=[“a”,“b”];
var num=[1,2];
var-arr=[];
用于(abc中的var i){
for(变量x在num中){
变量a={};
a、 str=abc[i];
a、 数字=num[x];
arr.push(a);
}
}
控制台日志(arr)
如评论中所述,您多次将a
对象推送到arr
,而不是添加四个单独的对象。要解决此问题,可以在for(var x in num)
循环中声明a
,每次都作为新对象(使用const
或let
)。但我进一步简化了它,请参见下面的代码
要遍历JavaScript数组,应该使用方法
正如评论中所说,您多次将a
对象推送到arr
,而不是添加四个单独的对象。要解决此问题,可以在for(var x in num)
循环中声明a
,每次都作为新对象(使用const
或let
)。但我进一步简化了它,请参见下面的代码
要遍历JavaScript数组,应该使用方法
//在第二个循环内移动1和2
//使用贴图在第二个循环中移动1和2:
let tempArray = abc.map((e,i) => { return num.map((ee,ii) => { return {"str": e, "number": ee }; } ) });
$.merge(tempArray[0], tempArray[1]);
使用地图:
let tempArray = abc.map((e,i) => { return num.map((ee,ii) => { return {"str": e, "number": ee }; } ) });
$.merge(tempArray[0], tempArray[1]);
只涉及一个对象;您的代码会更新一个对象并多次将其推入数组。如果需要不同的对象,则必须在每次迭代中为a
创建一个新值。另外,用var
或let
声明变量;您的代码会更新一个对象并多次将其推入数组。如果需要不同的对象,则必须在每次迭代中为a
创建一个新值。另外,使用var
或let
声明变量。