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
声明变量。