将对象数组中的多个数组合并为一个数组

时间:2019-03-12 04:18:28

标签: javascript arrays

我有一个对象,其中data是对象的数组,在数据对象内部,我有一个users属性,它是一个数组。

我需要将所有用户都放在一个阵列中。我使用mapconcat编写。

有什么办法可以提供更好的解决方案,或者这是正确的吗?

请参见下面的代码段。

var response = {data: [{users: [1,2,3]}, {users: [4,5,6]}]}

var users = response.data.map(o => o.users)

const usersCollection = [].concat(...users)

console.log(usersCollection)

3 个答案:

答案 0 :(得分:5)

您可以使用Array.prototype.flat()

  

flat()方法创建一个新数组,并将所有子数组元素递归连接到指定的 depth

depth | Optional

  

指定嵌套数组结构应展平的深度级别。默认为1。

var response = {data: [{users: [1,2,3]}, {users: [4,5,6]}]}

var users = response.data.map(o => o.users).flat();

console.log(users);

答案 1 :(得分:0)

如果使用ES6,请将spreadArray.reduce的功能结合使用

var response = {
  data: [{
    users: [1, 2, 3]
  }, {
    users: [4, 5, 6]
  }]
}

var users = response.data.reduce((accumulator, obj) => [...accumulator, ...obj.users], []);

console.log(users);

答案 2 :(得分:0)

  

flatMap()方法首先使用映射函数映射每个元素,   然后将结果展平为新数组。与地图相同   后面跟一个深度为1的单位,但是flatMap通常非常有用,因为   将两者合并为一种方法会更有效

response.data.flatMap(({users})=>users)

如果您正在浏览器中运行,则应格外小心供应商的支持。