我有一个响应对象,我想提取所有
id
值,但我不确定最好的方法......
const obj = {
"responseArray":[
{
"accounts":[
{
"products":[
{
"id":"123",
}
]
},
{
"products":[
{
"id":"456",
}
]
}
]
},
{
"accounts":[
{
"products":[
{
"id":"987",
}
]
},
{
"products":[
{
"id":"654",
}
]
}
]
}
]
}
我得到的最接近的是映射
const mapped = obj.responseArray.map(item => item?.accounts.map(acc => acc.products.map(prod => prod.id)))
// Response
// [ [ [Array], [Array] ], [ [Array], [Array] ] ]
这些
Array
位实际上包含了我想要的ID,只是显然不是我想要的格式......
您可以使用 flatMap 来获取一个简单的数组而不是数组的数组:
const obj = {
"responseArray":[
{
"accounts":[
{
"products":[
{
"id":"123",
}
]
},
{
"products":[
{
"id":"456",
}
]
}
]
},
{
"accounts":[
{
"products":[
{
"id":"987",
}
]
},
{
"products":[
{
"id":"654",
}
]
}
]
}
]
}
const mapped = obj.responseArray.flatMap(item => item?.accounts.flatMap(acc => acc.products.map(prod => prod.id)))
console.log(mapped)
使用“现代”(Chrome 69、Firefox 62、Edge 79、Opera 56、Safari 12)版本的 JavaScript,您可以
Array.prototype.flatMap
:
obj.responseArray
.flatMap(x => x.accounts)
.flatMap(x => x.products)
.map(x => x.id)
// [ '123', '456', '987', '654' ]
flatMap
接受一个返回数组的函数,并将该函数的所有数组映射到一个大数组中,然后可以进一步处理该数组。