将对象数组转换为对象对象并分配特定键

时间:2018-05-04 10:06:49

标签: javascript

我知道有很多问题但我无法找到我想要的东西。

我有一个像这样的对象数组

[{id:1}, {id:2}]

我想将id指定为键,将对象指定为值

{
    "1": {
         id: 1
     },
     "2": {
         id: 2
     }
}

3 个答案:

答案 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肯定是一瞥。但我猜这个任务会有点过分。