我如何转换一个大对象数组与lodash?
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...}]
如果你想要一些对象到数组的自定义映射(比如原始的Array.prototype.map),你可以使用_.forEach:
let myObject = {
key1: "value1",
key2: "value2",
// ...
};
let myNewArray = [];
_.forEach(myObject, (value, key) => {
myNewArray.push({
someNewKey: key,
someNewValue: value.toUpperCase() // just an example of new value based on original value
});
});
// myNewArray => [{ someNewKey: key1, someNewValue: 'VALUE1' }, ... ];
参见lodash doc of _。forEach https://lodash.com/docs/ # forEach
Var arr = _.map(obj)
你可以使用_。Map函数(包括lodash和下划线)和object,它将在内部处理这种情况,迭代每个值和键与您的迭代对象,并最终返回一个数组。事实上,如果你只是想要一个值数组,你可以使用它而不需要任何迭代对象(只要_.map(obj))。好的部分是,如果你需要中间的任何变换,你可以一次完成。
例子:
Var obj = {
key1: {id: 1, name: 'A'},
key2: {id: 2, name: 'B'},
key3: {id: 3,名称:'C'}
};
Var array1 = _。地图(obj, v = > v);
console.log('数组1:',array1);
/*实际上你不需要回调v=>v如果你
没有转换之间的任何东西,v=>v是默认*/
//如此简单,你可以使用
Var array2 = _.map(obj);
console.log('数组2:',array2);
< script src = " https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js " > < /脚本>
然而,如果你想转换你的对象,你可以这样做,即使你需要保留键,你可以这样做(_。Map (obj, (v, k) =>{…}),在Map中添加额外的参数,然后按您想要的方式使用它。
然而,还有其他香草JS解决方案(每个lodash解决方案都应该有纯JS版本),比如:
对象。键,然后将它们映射到值
对象。值(ES-2017)
对象。条目,然后映射每个键/值对(在ES-2017)
为…在循环中,并使用每个键feting值
还有更多。但是因为这个问题是针对lodash的(假设有人已经在使用它),所以如果找不到这些,你就不需要考虑太多关于版本、方法支持和错误处理的问题。
还有其他lodash解决方案,如_。值(对于特定的目的更易于阅读),或者获取对,然后映射等等。但如果你的代码需要灵活性,你可以在未来更新它,因为你需要保留键或转换值一点,那么最好的解决方案是使用单个_。映射在这个答案中。就可读性而言,这也不是那么难。
_.toArray(obj);
输出为:
[
{
"name": "Ivan",
"id": 12,
"friends": [
2,
44,
12
],
"works": {
"books": [],
"films": []
}
},
{
"name": "John",
"id": 22,
"friends": [
5,
31,
55
],
"works": {
"books": [],
"films": []
}
}
]"