我有一个对象数组,在它里面有另一个对象数组:
[
{
id: 1,
country: [
{
id: "5a60626f1d41c80c8d3f8a85"
},
{
id: "5a6062661d41c80c8b2f0413"
}
]
},
{
id: 2,
country: [
{
id: "5a60626f1d41c80c8d3f8a83"
},
{
id: "5a60626f1d41c80c8d3f8a84"
}
]
}
];
如何像这样得到country
的平面数组:
[
{ id: "5a60626f1d41c80c8d3f8a85" },
{ id: "5a6062661d41c80c8b2f0413" },
{ id: "5a60626f1d41c80c8d3f8a83" },
{ id: "5a60626f1d41c80c8d3f8a84" }
];
而不使用forEach
和temp变量呢
当我这样做:
(data || []).map(o=>{
return o.country.map(o2=>({id: o2.id}))
})
我又得到了同样的结构。
6条答案
按热度按时间xxhby3vn1#
最近编辑
所有现代JS环境现在都支持
Array.prototype.flat
和Array.prototype.flatMap
旧答案
不需要任何ES6魔法,您只需通过连接内部的
country
数组来减少数组。如果你想要ES6的特性(而不是箭头函数),使用数组扩展而不是concat方法:
注意:这些建议会在每次迭代中创建一个新数组。
为了提高效率,您不得不牺牲一些优雅:
vatpfxk52#
xriantvc3#
这样就可以工作了,只需将解决方案返回的嵌套数组连接起来
suzh9iv84#
古普塔的解决方案将适用于这种情况。但我想提供其他解决方案。
zqry0prt5#
对于JSON字符串数据,也可以在解析过程中完成:
6pp0gazn6#
我不知道为什么没有人提到
flat()
(可能是对于大型阵列,它可能性能较差)