用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
函数(对于lodash
和underscore
)与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 []);
注意我会避免在非常大的列表中不可变。