将具有唯一id属性的对象数组转换为Map

Baz*_*Baz 4 javascript ecmascript-6 es6-map

我有一个对象数组,其中每个对象都有一个名为的唯一成员id.如何创建Map,id如果是Map的键?

Ros*_*oss 7

您想将阵列缩减为地图:

const arr = [{id:1},{id:2},{id:2}];

const map = arr.reduce((acc, item) => acc.set(item.id, item), new Map());

console.log(map.get(1));
Run Code Online (Sandbox Code Playgroud)

这是一个反对使用和的JSPref.mapforEach

在Chrome V53 reduce是最快的,然后forEachmap最慢.


Nin*_*olz 3

您可以按照Map所需的格式映射一个新数组。

var array = [{ id: 1, value: 'one' }, { id: 2, value: 'two' }, { id: 3, value: 'three' }, { id: 4, value: 'four' }, { id: 5, value: 'five' }],
    map = new Map(array.map(a => [a.id, a]));

console.log([...map]);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)

或者迭代并将新项目添加到某个键

var array = [{ id: 1, value: 'one' }, { id: 2, value: 'two' }, { id: 3, value: 'three' }, { id: 4, value: 'four' }, { id: 5, value: 'five' }],
    map = new Map();

array.forEach(a => map.set(a.id, a));
console.log([...map]);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)