如何在JavaScript中正确地遍历项目并将其放入一个新数组中以提高性能?

62lalag4  于 2023-04-10  发布在  Java
关注(0)|答案(3)|浏览(117)

这是我的代码:

let newArr = []

const items = [
    {
        name: 'JTB 0110-01',
        offers: ['one', 'two']
    },
    {
        name: 'LOBA CHEMIE',
        offers: ['three', 'four', 'five']
    },
    //more
]

items.forEach(item => {
    item.offers.forEach(i => newArr.push(i));
})

//more code

我想循环遍历items数组,每个offers属性都将被迭代并推送到新数组中。
现在代码可以工作了,但问题是在继续执行foreach下的代码之前,我希望循环已经完成。我如何才能正确地做到这一点?

更新

抱歉,我说的不清楚。我希望它是同步的,就像在迭代之后进入代码之前一样,我希望循环完成。

vi4fp9gy

vi4fp9gy1#

您可以将Array#concatspread syntax ...和Map数组一起使用。

var items = [{ name: 'JTB 0110-01', offers: ['one', 'two'] }, { name: 'LOBA CHEMIE', offers: ['three', 'four', 'five'] }],
    array = Array.prototype.concat(...items.map(({offers}) => offers));

console.log(array);
yb3bgrhw

yb3bgrhw2#

您可以将spread语法与reduce方法结合使用。
reduce()方法对accumulator和数组中的每个元素(从左到右)应用一个函数,将其减少为单个值。

const items = [ { name: 'JTB 0110-01', offers: ['one', 'two'] }, { name: 'LOBA CHEMIE', offers: ['three', 'four', 'five'] }]
let result = items.reduce(function(acc,elem){
  acc.push(...elem.offers);
  return acc;
},[]);
console.log(result);
osh3o9ms

osh3o9ms3#

可以使用spread syntax合并offer密钥的值

let newArr = []

const items = [{
    name: 'JTB 0110-01',
    offers: ['one', 'two']
  },
  {
    name: 'LOBA CHEMIE',
    offers: ['three', 'four', 'five']
  }

]
var newArray = [];
items.forEach(function(item) {
  // // ... is spread syntax which will combine the array
   newArray.push(...item.offers)
})
console.log(newArray)

相关问题