我有一个对象数组,其中每个对象都有一个名为id
. 我如何创建一个地图,id
如果地图的关键是?
问问题
7608 次
3 回答
8
您想将数组减少为地图:
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));
这是一个反对使用and的JSPref。map
forEach
在 Chrome v53reduce
中是最快的,然后forEach
是map
最慢的。
于 2016-10-24T14:13:43.510 回答
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; }
于 2016-10-24T13:59:08.793 回答
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)
}
于 2016-10-24T13:59:12.163 回答