如何将值附加到ES6 Map

时间:2019-01-04 15:06:50

标签: javascript ecmascript-6

我正在尝试了解ES6 Map数据结构,并且难以理解其某些行为。我想创建一个以数组作为值的Map,并将新值附加(推)到Map的当前值上。例如:

let m = new Map()

m.set(1, []) // []

m.set(1, m.get(1).push(2)) // [[1, 1]]

对于为什么我没有得到[2]作为上面的m.get(1)的值,我感到困惑。如何将值附加到地图中的数组?

5 个答案:

答案 0 :(得分:4)

这是因为方法push返回插入后的数组大小。

您可以将代码更改为以下内容以附加到数组:

m.get(1).push(2);

它会更新地图中的值,因为将值作为参考传递回去,所以无需再次尝试重新设置值。

答案 1 :(得分:1)

根据需要定义地图的最佳方法是明确告诉地图您要处理的数据类型。

如果您要在数组中输入值,例如可以使用“字符串ID”

在这种情况下,您将拥有这个:

let map = new Map<String, Array<any>>

然后您可以创建类似map["key"] = ["lol", 1, null]

的项目

答案 2 :(得分:1)

有两件事。首先,如@ Adriani6所说,push方法不会返回指向数组的指针,而是返回数组的大小。

第二,您不需要执行其他m.set,因为您的推送将直接影响m.get返回的引用后面的数组

function displayMap(m) {
  m.forEach(function(val, key) {
    console.log(key + " => " + val);
  });
}

let m = new Map();

m.set(1, []);

displayMap(m);

m.get(1).push(20);

displayMap(m);

答案 3 :(得分:0)

失败,因为push()的返回值是推送后数组的大小。

  1. 您可以在执行get()之后推送内容。

    m.get(1).push(2);

  2. 如果要测试set(),请编写如下的自我可执行函数:

let m = new Map()

m.set(1, []) // []

console.log(m.get(1))

m.set(1, (() => {m.get(1).push(2);return m.get(1);})());

console.log(m.get(1))

答案 4 :(得分:0)

Here's a working example of what you are trying to do(打开控制台)

看看here。如您所见,push方法返回刚突变的数组的新长度,因此返回结果。

相关问题