【问题标题】:What is a clean way of merging inner arrays into one from map?将内部数组从地图合并为一个的干净方法是什么?
【发布时间】:2021-07-23 16:18:23
【问题描述】:

我目前有以下内容,如果没有forEach,有没有更简洁的方法?

今天是星期五,今天我的头都晕了:)

let productsObject = [{
  id: 1,
  addons: [{
    id: 1,
    group_id: 1
  }, {
    id: 2,
    group_id: 1
  }, {
    id: 3,
    group_id: 1
  }]
}, {
  id: 2,
  addons: [{
    id: 1,
    group_id: 2
  }, {
    id: 3,
    group_id: 2
  }]
}];

let addonsList = [];

productsObject.map(e => e.addons).forEach(e => { 
  addonsList = [...addonsList, ...e];
});

console.log(addonsList);

【问题讨论】:

    标签: javascript dictionary foreach


    【解决方案1】:

    您可以将Array.prototype.reduce() 用于单线解决方案:

    let productsObject = [{
      id: 1,
      addons: [{
        id: 1,
        group_id: 1
      }, {
        id: 2,
        group_id: 1
      }, {
        id: 3,
        group_id: 1
      }]
    }, {
      id: 2,
      addons: [{
        id: 1,
        group_id: 2
      }, {
        id: 3,
        group_id: 2
      }]
    }];
    
    const addonsList = productsObject.reduce((acc, { addons }) => [...acc, ...addons], []);
    
    console.log(addonsList);

    【讨论】:

    • 天哪,这正是我想要的 :) - 我整个上午都在绞尽脑汁。我总是忘记reduce。
    • 很高兴它有帮助 ? 是的,这个函数通常是转换数组时的好方法
    【解决方案2】:

    另一个不错的选择是使用flatMap。顾名思义,它是flatmap 方法的组合。

    let productsObject = [{
      id: 1,
      addons: [{
        id: 1,
        group_id: 1
      }, {
        id: 2,
        group_id: 1
      }, {
        id: 3,
        group_id: 1
      }]
    }, {
      id: 2,
      addons: [{
        id: 1,
        group_id: 2
      }, {
        id: 3,
        group_id: 2
      }]
    }];
    
    let addonsList = productsObject.flatMap(e => e.addons);
    
    console.log(addonsList);

    【讨论】:

    • 确实,简单多了?
    • 哦,这很整洁!,只有 flatMap 的问题,我们在 Internet Explorer 上仍有一些客户
    猜你喜欢
    • 2010-09-25
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多