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

时间:2016-10-24 13:55:36

标签: javascript ecmascript-6 es6-map

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

3 个答案:

答案 0 :(得分: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));




以下JSPref反对使用mapforEach

在Chrome v53 reduce中速度最快,forEach map最慢。

答案 1 :(得分: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]);
.as-console-wrapper { max-height: 100% !important; top: 0; }

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

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]);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 2 :(得分:3)

您可以使用Array.prototype.map()将数组元素映射到[element.id, element]对,然后将生成的数组传递给Map构造函数。

const arr = [{id: 1, a: true, b: false}, {id: 2, a: false, b: true}]

const map = new Map(arr.map(element => [element.id, element]))

// Check if map looks OK
for (const [key, value] of map) {
  console.log(key, value)
}