用指定的对象键快速从对象数组中创建对象映射

12

我有一个均匀对象的数组:

var objects = [{
    id: 1,
    name: "one"
}, {
    id: 2,
    name: "two"
}];

我将使用每个对象的id属性作为Map键,将它们转换为Map:

var map = new Map();

objects.forEach(obj => map.set(obj.id, obj));

然而,我希望进行转换时不需手动创建新的地图对象,也不需手动迭代数组并自行调用set

此外,我认为我不应该为此实现一个实用函数,因为这应该是本机功能。

注意:搜索“js将数组转换为地图”、“js将数组转换为地图”或“js从数组创建地图”的查询都包含使用Object或具有实用程序函数的过时答案。我正在寻找这里的本机方法。

即,我正在寻找JavaScript中将数组映射到C#字典的本机等效方法。

var map = list.ToDictionary(item => item.id);

这非常简单和方便,但有趣的是,在JavaScript中没有Map.from(尽管有一个Array.from)。

1个回答

29

在撰写问题时,我进行了研究,并且我觉得应该在这里留下解决方案,因为它可能有很多实际应用。


我正在寻找在JavaScript中将数组映射到字典的本地等价物,与C#中的操作类似。
考虑到一个Map可以使用2元素数组的可迭代对象iterable进行constructed,其中每个内部数组的第一个元素被用作键,第二个元素被用作值,我认为这是本地JS等效的最短方式。
new Map(objects.map(obj => [obj.id, obj]));

在线演示


如果你的目标浏览器不支持Map,请确保使用polyfill。请查看此表格以了解浏览器支持情况。它已经被包含在core-js中,该库通常与Babel一起使用。 - Marko Gresak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接