Javascript创建一个对象,由数组值键入

时间:2017-01-26 11:50:56

标签: javascript arrays object lodash

我有一个方法需要从提供的id参数返回用户对象。进一步的方法将使用这种结构,因此它不是使用现有结构的简单情况。

基本上我有一个包含type密钥的数据库,这是过滤的,因此我有一个users的集合。我需要做的是创建一个由用户_id值键入的对象,并包含省略_idtype的用户对象。

使用lodash或一些ES6糖我想转换以下Array;

[
  {
    "_id": "0e12e661cb50068a135b36067f001d20",
    "name": "Joe Bloggs",
    "type": "user"
  },
  {
    "_id": "0e12e661cb50068a135b36067f00373f",
    "name": "Ben Bloggs",
    "type": "user"
  }
]

进入以下Object,省略_idtype;

{
  "0e12e661cb50068a135b36067f001d20": {
    "name": "Joe Bloggs"
  },
  "0e12e661cb50068a135b36067f00373f": {
    "name": "Ben Bloggs"
  }
}

编辑我需要返回对象而不是名称,因为可以将更多属性添加到这些对象中。

1 个答案:

答案 0 :(得分:5)

您只需reduce()即可完成此操作。



var data = [{
  "_id": "0e12e661cb50068a135b36067f001d20",
  "name": "Joe Bloggs",
  "type": "user"
}, {
  "_id": "0e12e661cb50068a135b36067f00373f",
  "name": "Ben Bloggs",
  "type": "user"
}]

var result = data.reduce(function(r, e) {
  r[e._id] = {name: e.name};
  return r;
}, {})

console.log(result)




带箭头功能的ES6版本

var result = data.reduce((r, e) => (r[e._id] = {name: e.name}, r), {})

更新:要从新对象中排除特定属性,您可以使用Object.assign() DEMO创建对象副本,然后使用delete删除某些属性,也可以使用forEach() }循环并添加您想要的属性DEMO