我知道有很多问题但我无法找到我想要的东西。
我有一个像这样的对象数组
[{id:1}, {id:2}]
我想将id指定为键,将对象指定为值
{
"1": {
id: 1
},
"2": {
id: 2
}
}
答案 0 :(得分:2)
使用Array.reduce()
根据key
参数创建一个带键的对象:
const keyBy = (arr, key) => arr.reduce((r, o) => {
r[o[key]] = o;
return r;
}, {});
const arr = [{id:1}, {id:2}];
const result = keyBy(arr, 'id');
console.log(result);
如果您希望它更具功能性,请使用object spread替换累加器:
const keyBy = (arr, key) => arr.reduce((r, o) => ({ ...r, [o[key]]: o }), {});
const arr = [{id:1}, {id:2}];
const result = keyBy(arr, 'id');
console.log(result);
答案 1 :(得分:1)
使用.reduce
:
const input = [{id:1}, {id:2}];
const output = input.reduce((accum, { id }) => {
accum[id] = { id };
return accum;
}, {});
console.log(output);
答案 2 :(得分:0)
一种方法可能是(es6):
const newObject = {};
myArrayWithObjects.map(singleObject => {
newObject[singleObject.id.toString()] = singleObject;
return true;
});
Lodash也可以帮助您:
const newObject = _.keyBy(myArrayWithObjects, function(singleObject) {
return singleObject.id.toString();
});
https://github.com/paularmstrong/normalizr肯定是一瞥。但我猜这个任务会有点过分。