如何将对象数组转换为地图

时间:2017-09-20 21:57:48

标签: javascript javascript-objects

我有一个如下数组:

var arr = [ 
  {
    "id" :"1",
    "name" : "xyz"
  },
  {
    "id" :"2",
    "name" : "abc"
  },
  {
    "id" :"2",
    "name" : "cde"
  }
]

我想将其转换为以下格式:

{
  '2' : ['abc','cde'],
  '1' : 'xyz'
}

我该怎么做?在角度js中有一些特殊的方法吗?

2 个答案:

答案 0 :(得分:2)

迭代整个arr,并为每个对象继续根据id添加名称到新对象。



var arr = [ 
{
  "id" :"1",
  "name" : "xyz"
},
{
  "id" :"2",
  "name" : "abc"
},
{
  "id" :"2",
  "name" : "cde"
}
  ];

var obj ={};

arr.forEach(x => obj.hasOwnProperty(x.id) ? obj[x.id].push(x.name) : obj[x.id] = [x.name]);

console.log(obj);




答案 1 :(得分:0)

您可以通过使用reduce来避免全局变量,在遍历数组时散列值。

var arr = [{
    "id": "1",
    "name": "xyz"
  },
  {
    "id": "2",
    "name": "abc"
  },
  {
    "id": "2",
    "name": "cde"
  }
];



let result = arr.reduce((hash, v) => (!hash[v.id] ? hash[v.id] = [v.name] : hash[v.id].push(v.name), hash), ({}))


console.log(result)

相关问题