我声明了一个使用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' }
}
但是我需要将其设为,(此处1
和2
代表我的对象的id
属性)
{
'1': {id: 1, value: 'abc'},
'2': {id: 2, value: 'xyz'}
}
我已经尝试了一些,但没有运气,有人可以解释一下吗?
答案 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);