我如何转换一个大对象数组与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...}]

当前回答

对我来说,这很有效:

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

结果

{"a":"b", "c":"d", "e":"f"} 

into

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

其他回答

对我来说,这很有效:

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

结果

{"a":"b", "c":"d", "e":"f"} 

into

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

2017年更新:对象。valuevalues, lodash values和toArray。为了保存键映射和展开操作符,请注意:

//从'lodash'导入{toArray, map} Const map = _.map Const input = { 关键:{ 价值:“价值” } } Const输出= map(input, (value, key) => ({ 键, 价值…… })) console.log(输出) // >> [{key: 'key', value: 'value'}]) < script src = " https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js " > < /脚本>

如果你想要一些对象到数组的自定义映射(比如原始的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

如果您希望键(在本例中为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

你可以这样做

var arr = _.values(obj);

有关文档请参见这里。