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

当前回答

你可以这样做

var arr = _.values(obj);

有关文档请参见这里。

其他回答

如果您希望键(在本例中为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
_.toArray(obj);

输出为:

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

一个现代的本地解决方案,如果有人感兴趣:

const arr = Object.keys(obj).map(key => ({ key, value: obj[key] }));

或(不是IE):

const arr = Object.entries(obj).map(([key, value]) => ({ key, value }));

将对象转换为数组与纯JavaScript的(ECMAScript-2016)对象。

Var obj = { 22:{名称:“约翰”,id: 22岁的朋友:[55]5日31日,工作原理:{书:[]、电影:[]}}, 12:{名称:“伊万”,id: 12,朋友:[2,44岁,12],工作原理:{书:[]、电影:[]}} } var values = Object.values(obj) console.log(值);

如果你还想保留键,使用Object。entry和array# map像这样:

Var obj = { 22:{名称:“约翰”,id: 22岁的朋友:[55]5日31日,工作原理:{书:[]、电影:[]}}, 12:{名称:“伊万”,id: 12,朋友:[2,44岁,12],工作原理:{书:[]、电影:[]}} } var values = Object.entries(obj)。Map (([k, v]) => ({[k]: v})) console.log(值);

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