用lodash将对象转换为数组

我怎样才能把一个大object转换成array

例:

 var obj = { 22: {name:"John", id:22, friends:[5,31,55], works:{books:[], films:[],} 12: {name:"Ivan", id:12, friends:[2,44,12], works:{books:[], films:[],} } // transform to var arr = [{name:"John", id:22...},{name:"Ivan", id:12...}] 

谢谢!

你可以做

 var arr = _.values(obj); 

有关文档,请参阅此处

 _.toArray(obj); 

输出为:

 [ { "name": "Ivan", "id": 12, "friends": [ 2, 44, 12 ], "works": { "books": [], "films": [] } }, { "name": "John", "id": 22, "friends": [ 5, 31, 55 ], "works": { "books": [], "films": [] } } ]" 

如果你想要的键(id在这种情况下)被保存为每个数组项的属性,你可以做

 const arr = _(obj) //wrap object so that you can chain lodash methods .mapValues((value, id)=>_.merge({}, value, {id})) //attach id to object .values() //get the values of the result .value() //unwrap array of objects 

对我来说,这工作:

 _.map(_.toPairs(data), d => _.fromPairs([d])); 

事实certificate

{“a”:“b”,“c”:“d”,“e”:“f”}

[{“a”:“b”},{“c”:“d”},{“e”:“f”}]

2017更新: Object.values ,lodash 值和toArray做到这一点。 并保存键图和传播运营商打好:

 // import { toArray, map } from 'lodash' const map = _.map const input = { key: { value: 'value' } } const output = map(input, (value, key) => ({ key, ...value })) console.log(output) // >> [{key: 'key', value: 'value'}]) 
 <script src="ajax/libs/lodash.js/4.17.4/lodash.js"></script> 

除了所有现有的答案(这些答案真的很好,很完美),只需在这里添加另一种方法:

您可以使用_.map函数(对于lodashunderscore )与object ,它将在内部处理这种情况下,遍历每个值和您的迭代键,最后返回一个数组。 好的一点是,如果你需要在两者之间进行任何转换,你可以一口气做到。

例:

 var obj = { key1: {id: 1, name: 'A'}, key2: {id: 2, name: 'B'}, key3: {id: 3, name: 'C'} }; var array = _.map(obj, v=>v); console.log(array); 
 <script src="ajax/libs/lodash.js/4.17.4/lodash.js"></script> 

现代的本地解决scheme,如果有人感兴趣。

 const arr = Object.keys(obj).reduce((arr, key) => ([...arr, { ...obj[key], key }]), // Can add key if you don't have it []); 

注意我会避免在非常大的列表中不可变。