Javascript 获取多维数组中的项,如对象
我有以下变量:Javascript 获取多维数组中的项,如对象,javascript,lodash,Javascript,Lodash,我有以下变量: > let location = {0: {1: {name: 'Fred', age: 20}, 5: {name: 'Ema', age: 55}}, 9: {3: {name: 'John', age: 29}}}; 我想得到其中的项目: > console.log(get_items(location)); [{name: 'Fred', age: 20}, {name: 'Ema', age: 55}, {name: 'John', age: 29}]
> let location = {0: {1: {name: 'Fred', age: 20}, 5: {name: 'Ema', age: 55}}, 9: {3: {name: 'John', age: 29}}};
我想得到其中的项目:
> console.log(get_items(location));
[{name: 'Fred', age: 20}, {name: 'Ema', age: 55}, {name: 'John', age: 29}]
我编写了以下函数:
function get_items(location) {
return _.values(location).reduce((items, item)=> items.concat(_.values(item)), []);
}
但是我想知道是否有更优雅的解决方案来解决这个问题。您可以使用
数组#平面图
和对象#值
将提取外部对象的值:对象#值
将通过再次为每个对象应用Array#flatMap
提取值后,将嵌套对象映射并展平为单个对象数组:Object#值
let data={0:{1:{name:'Fred',年龄:20},5:{name:'Ema',年龄:55},9:{3:{name:'John',年龄:29};
常量转换=(数据)=>Object.values(数据).flatMap(Object.values);
console.log(转换(数据))代码>我觉得你的方法非常好。此外,从性能角度来看,.reduce()
比.flatMap()
做得好得多。而且,只要我开始谈论性能,您就可以使用.concat()
在.reduce()
中重新创建不必要的累加器,为了获得一些效率,我宁愿使用.values(location).reduce((items,item)=>(items.push(u.values(item)),items),[])