使用指定的对象键从对象Array快速创建对象Map

时间:2017-01-20 11:58:55

标签: javascript ecmascript-6

我有一系列统一对象:

In [216]: (x, n) = sympy.symbols("x n")

In [217]: f = sympy.Sum(x, (n, 0, 10))

In [218]: f.free_symbols
Out[218]: {x}

In [219]: f.variables
Out[219]: [n]

我正在使用每个对象的var objects = [{ id: 1, name: "one" }, { id: 2, name: "two" }]; 属性作为Map键将它们转换为Map:

id

但是,我想在没有的情况下进行转换:

  1. 我必须自己手动创建一个新的地图对象,
  2. 必须手动迭代数组并自己调用var map = new Map(); objects.forEach(obj => map.set(obj.id, obj));
  3. 此外,我觉得我不应该为这个可能的原生功能制作实用功能。

      

    注意:搜索查询 js数组以映射,或 js将数组转换为地图,或 js map from array < / em>使用set的石器时代答案或具有效用函数的解决方案都变得臃肿。我在这里寻找 原生方法。

    即。我正在寻找相当于将数组映射到C#中的字典的原生JavaScript,例如。

    Object

    这非常简单方便,但有趣的是,JavaScript中没有var map = list.ToDictionary(item => item.id); (即使有Map.from)。

1 个答案:

答案 0 :(得分:3)

我在写这个问题时做了我的研究,我觉得我应该把解决方案留在这里,因为它可能的实际应用很多。

  

我正在寻找与C#

中的数组映射相对应的原生JavaScript

考虑Map constructed可以是iterable个2元素数组,其中每个内部数组的第一个元素用作键,第二个元素用于作为一个值,我相信这是本机的JS等价物,也是最短的:

new Map(objects.map(obj => [obj.id, obj]));

Live demo