我有一个对象,其中data是对象的数组,在数据对象内部,我有一个users属性,它是一个数组。
我需要将所有用户都放在一个阵列中。我使用map
和concat
编写。
有什么办法可以提供更好的解决方案,或者这是正确的吗?
请参见下面的代码段。
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)
答案 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,请将spread
与Array.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)
如果您正在浏览器中运行,则应格外小心供应商的支持。