I'm trying to update my code to ES6 as I'm using Node 4.0 and really like its features so far. However, I have a problem with the new ES6Mapdata structure because it behaves differently than{}when usingArrayas the key. I use it as a counter map.
I run this code and I want to know how to use an array as a key for aMap.
"use strict"; var a = new Map(); a.set(['x','y'], 1); console.log(a.get(['x','y'])); var b = {}; b[['x','y']] = 1; console.log(b[['x','y']]);
It prints the following, the first line should be1instead ofundefined:
undefined 1
The original JS map stringifies the keys, and I don't want to do the same type of stringification hack with the new ES6Map.
How can I reliably use arrays as keys in an ES6Map?
You need to save a reference to the non-primitive instance of the
Arrayused as the key. Please note the difference in the following two examples:Understanding ES2015 Map key comparisons is (almost) like working with the
===operator. Two array instances, even if they contain the same values, are not compared to each other in a===manner.Try this:
Since the Map class is intended to be used as a base class, you may be able to implement a subclass using an overridden
.get()function.(The "almost" in the first sentence reflects that the Map key equality comparison is done through
Object.is(), which rarely occurs in daily coding. Essentially, equality in JavaScriptThirdvariant tested.)