我有一个数组,里面有另一个数组。
[
[
{
"userId": 1,
"title": "title 1",
},
{
"userId": 2,
"title": "title 2",
}
],
[
{
"userId": 3,
"title": "title 3",
}
]
]
我正在尝试仅使用userId获得一个新数组。例如。
[
{ "userId": 1 },
{ "userId": 2 },
{ "userId": 3 }
]
array.map(o => o.userId)
适用于对象数组,不知道如何进入数组。
感谢您的帮助
答案 0 :(得分:3)
您必须首先flat数组:
const data = [
[
{
"userId": 1,
"title": "title 1",
},
{
"userId": 2,
"title": "title 2",
}
],
[
{
"userId": 3,
"title": "title 3",
}
]
]
const result = data.flat().map(({userId}) => ({userId}));
console.log(result);
答案 1 :(得分:1)
Array.prototype.flat很新;万一您不能使用它,可以结合使用reduce
和map
:
const data = [
[
{
"userId": 1,
"title": "title 1",
},
{
"userId": 2,
"title": "title 2",
}
],
[
{
"userId": 3,
"title": "title 3",
}
]
]
const userIds = data.reduce((_, a) => {
return _.concat(a.map(({ userId }) => ({ userId })))
}, [])
console.log(userIds)
在map
调用中,reduce
的一个好处是您只需要遍历一次数组而不是链接。与链接数组方法相比,这在较大的数组上将具有更好的性能。
所有假设您的数据结构只有一个深度!
答案 2 :(得分:1)
另一种使用Array.reduce
的浏览器that don't support Array.flat
.
const data = [
[
{
"userId": 1,
"title": "title 1",
},
{
"userId": 2,
"title": "title 2",
}
],
[
{
"userId": 3,
"title": "title 3",
}
]
]
const result = data.reduce((arr, i) => {
return arr.concat(i.map(({ userId }) => ({ userId })))
}, [])
console.log(result)
答案 3 :(得分:1)
您可以使用"deck0deck1"
展平数组,然后使用解构和array#concat
生成数组。
array#map
const data = [ [ { "userId": 1, "title": "title 1", }, { "userId": 2, "title": "title 2", } ], [ { "userId": 3, "title": "title 3", } ] ],
result = [].concat(...data).map(({userId}) => ({userId}));
console.log(result);
答案 4 :(得分:-1)
只需将所有内容放入一个新数组中即可:)
let arr = [
[
{
"userId": 1,
"title": "title 1",
},
{
"userId": 2,
"title": "title 2",
}
],
[
{
"userId": 3,
"title": "title 3",
}
]
]
let newArr = []
arr.forEach(i => i.forEach(o => newArr.push(o)))
console.log(newArr.map(o => o.userId))