基于给定键的对象数组

时间:2018-04-24 14:27:16

标签: javascript json

我声明了一个使用Object.assign

的数组



var obj = [{
  id: 1,
  value: 'abc'
}, {
  id: 2,
  value: 'xyz'
}];

console.log(Object.assign({}, obj));




它正在转变为,

{ 
    '0': { id: 1, value: 'abc' }, 
    '1': { id: 2, value: 'xyz' } 
}

但是我需要将其设为,(此处12代表我的对象的id属性)

{
        '1': {id: 1, value: 'abc'},
        '2': {id: 2, value: 'xyz'}
}

我已经尝试了一些,但没有运气,有人可以解释一下吗?

4 个答案:

答案 0 :(得分:6)

您可以使用所需的键映射对象中的对象,并将其分配给单个对象。

var objects = [{ id: 1, value: 'abc' }, { id: 2, value: 'xyz' }],
    result = Object.assign(...objects.map(o => ({ [o.id]: o })));
    
console.log(result);

答案 1 :(得分:4)

您可以将reduce()方法与Object.assign一起使用。



var obj = [{id: 1, value: 'abc'}, {id: 2, value: 'xyz'}];
var result = obj.reduce((r, e) => Object.assign(r, {[e.id]: e}), {});
console.log(result)




答案 2 :(得分:3)

您可以直接使用Array#reduce来执行此操作,此处不需要Object.assign



var obj = [{id: 1, value: 'abc'}, {id: 2, value: 'xyz'}];

let result = obj.reduce((acc, item) => {
  acc[item.id] = item;
  return acc;
}, {});

console.log(result);




答案 3 :(得分:3)

如果您想使用.id作为密钥,可以使用reduce并使用Object.assign



let obj = [{id: 1,value: 'abc'}, {id: 2,value: 'xyz'}];

let result = obj.reduce((c, v) => Object.assign(c, {[v.id]: v}), {});

console.log(result);