4 回答

TA贡献1856条经验 获得超11个赞
当您推送到 array3 时,您需要在每个循环中克隆 customObject1,您可以使用 JSON.stringify() 然后 JSON.parse() 来获取该对象的副本(在内存中具有新的引用),否则您将覆盖每个循环引用同一对象。
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贡献1868条经验 获得超4个赞
customObject1您只能获得最后一个值,因为您为每个元素重复使用相同的实例array3。customObject1通过为每个元素定义一个新实例,您将获得更好的结果:
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贡献1853条经验 获得超6个赞
问题是,在内部 forEach 循环的每次迭代期间都使用相同的 customObject 引用。我更喜欢一种完全不使用变量的解决方案,直接将对象作为参数传递到推送函数中。
let a = [];
let array3 = [];
array1.forEach((val1) => {
array2.forEach((val2) => {
if (val1.type === "sedan") {
array3.push({ label: "Sedan Car", year: val2.year });
}
});
});
如果您想保留变量,您还可以利用对象解构来创建副本
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贡献1887条经验 获得超5个赞
我知道你想在这里做什么。但您可以这样做。
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);
添加回答
举报