为了账号安全,请及时绑定邮箱和手机立即绑定

对象始终获取 forEach 循环中的最后一个值 - JavaScript

对象始终获取 forEach 循环中的最后一个值 - JavaScript

慕姐4208626 2023-08-18 16:14:51
尝试根据的array2值过滤结果,但结果数组始终打印 forEach 循环中的最后一个值。typearray1片段const array1 = [{    name: "Audi",    type: "sedan"  },  {    name: "BMW",    type: "sedan"  },  {    name: "Benz",    type: "suv"  }];const array2 = [{  year: "2020"}, {  year: "2021"}];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);      console.log(array3);    }  });});这是我期待的结果。有人可以帮忙吗?array3 = [{label: 'Sedan Car', year: '2020'}, {label: 'Sedan Car', year: '2021'}]
查看完整描述

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);

    }

  });

});


查看完整回答
反对 回复 2023-08-18
?
MYYA

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);

    }

  });

});


查看完整回答
反对 回复 2023-08-18
?
墨色风雨

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);

    }

  });

});


查看完整回答
反对 回复 2023-08-18
?
慕工程0101907

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);


查看完整回答
反对 回复 2023-08-18
  • 4 回答
  • 0 关注
  • 321 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信