我有一个如下数组:
var arr = [
{
"id" :"1",
"name" : "xyz"
},
{
"id" :"2",
"name" : "abc"
},
{
"id" :"2",
"name" : "cde"
}
]
我想将其转换为以下格式:
{
'2' : ['abc','cde'],
'1' : 'xyz'
}
我该怎么做?在角度js中有一些特殊的方法吗?
答案 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)