4 回答

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超11個(gè)贊
當(dāng)您推送到 array3 時(shí),您需要在每個(gè)循環(huán)中克隆 customObject1,您可以使用 JSON.stringify() 然后 JSON.parse() 來獲取該對(duì)象的副本(在內(nèi)存中具有新的引用),否則您將覆蓋每個(gè)循環(huán)引用同一對(duì)象。
let a = [];
let customObject1 = {};
let array3 = [];
array1.forEach((val1) => {
? array2.forEach((val2) => {
? ? if (val1.type === "sedan") {
? ? ? customObject1["label"] = "Sedan Car";
? ? ? customObject1["year"] = val2.year;
? ? ? array3.push(JSON.parse(JSON.stringify(customObject1)));
? ? ? console.log(array3);
? ? }
? });
});

TA貢獻(xiàn)1868條經(jīng)驗(yàn) 獲得超4個(gè)贊
customObject1您只能獲得最后一個(gè)值,因?yàn)槟鸀槊總€(gè)元素重復(fù)使用相同的實(shí)例array3。customObject1通過為每個(gè)元素定義一個(gè)新實(shí)例,您將獲得更好的結(jié)果:
const array1 = [{
name: "Audi",
type: "sedan"
},
{
name: "BMW",
type: "sedan"
},
{
name: "Benz",
type: "suv"
}
];
const array2 = [{
year: "2020"
}, {
year: "2021"
}];
let a = [];
let array3 = [];
array1.forEach((val1) => {
array2.forEach((val2) => {
if (val1.type === "sedan") {
let customObject1 = {};
customObject1["label"] = "Sedan Car";
customObject1["year"] = val2.year;
array3.push(customObject1);
console.log(array3);
}
});
});

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超6個(gè)贊
問題是,在內(nèi)部 forEach 循環(huán)的每次迭代期間都使用相同的 customObject 引用。我更喜歡一種完全不使用變量的解決方案,直接將對(duì)象作為參數(shù)傳遞到推送函數(shù)中。
let a = [];
let array3 = [];
array1.forEach((val1) => {
array2.forEach((val2) => {
if (val1.type === "sedan") {
array3.push({ label: "Sedan Car", year: val2.year });
}
});
});
如果您想保留變量,您還可以利用對(duì)象解構(gòu)來創(chuàng)建副本
let a = [];
let customObject1 = {};
let array3 = [];
array1.forEach((val1) => {
array2.forEach((val2) => {
if (val1.type === "sedan") {
customObject1["label"] = "Sedan Car";
customObject1["year"] = val2.year;
array3.push({...customObject1}) //destructuring the object;
console.log(array3);
}
});
});

TA貢獻(xiàn)1887條經(jīng)驗(yàn) 獲得超5個(gè)贊
我知道你想在這里做什么。但您可以這樣做。
const array1 = [
{
name: 'Audi',
type: 'sedan',
},
{
name: 'BMW',
type: 'sedan',
},
{
name: 'Benz',
type: 'suv',
},
];
const array2 = [
{
year: '2020',
},
{
year: '2021',
},
];
const array3 = [];
array2.forEach((item, index) => {
array1.forEach((item2) => {
if (item2.type === 'sedan') {
item.label = 'Sedan Car';
}
});
array3.push(item);
});
console.log(array3);
添加回答
舉報(bào)