使用map从数组的数组创建新数组的更好方法

时间:2018-01-25 20:46:31

标签: javascript ecmascript-6

我有一个projects列表如下:

projects = [{name: '1',
             agencies: ['USA', 'China']},
            {name: '2',
             agencies: ['Japan', 'Russia']}]

我想得到结果['USA', 'China', 'Japan', 'Russia'],目前我使用下面的代码,但我想知道是否有更好的解决方案(一行代码)使用map函数:

const agencies = [];
projects.forEach((project) =>
        project.agencies.forEach((agency) => {
            agencies.push(agency);
        })
);

3 个答案:

答案 0 :(得分:1)

这是一个简单的单行程来完成这个:



const projects = [{
  name: '1',
  agencies: ['USA', 'China']
}, {
  name: '2',
  agencies: ['Japan', 'Russia']
}]

const agencies = [].concat(...projects.map(x => x.agencies));
console.log(agencies)




答案 1 :(得分:1)

根据定义,

返回的地图的长度始终与用于生成它的数组的长度相同。

您可能应该使用reduce来生成不同长度的数组。

尝试:

 projects.reduce((acc, project) => [...acc, ...project.agencies], [])

答案 2 :(得分:1)

我会使用destructuring,reduce和concat:

  agencies.reduce((res, {agencies}) => res.concat(agencies));