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),[])