使用Array对象作为ES6 Map的键
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Array对象作为ES6 Map的键相关的知识,希望对你有一定的参考价值。
我正在尝试将我的代码更新为ES6,因为我使用的是Node 4.0,并且到目前为止它非常喜欢它的功能。但是我对新的ES6 Map
数据结构有问题,因为当使用作为关键时,它与
Array
的行为不同。我用它作为计数器图。
我运行此代码,我想知道如何使用数组作为Map
的键。
"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']]);
它打印出以下内容,第一行应该是1
而不是undefined
:
undefined
1
原始的JS地图将密钥字符串化,我不想与新的ES6 qazxsw poi进行相同类型的stringify破解。
对于ES6 Map
,我能做些什么才能可靠地使用数组作为键?
了解ES2015 Map键与Map
运算符进行比较。两个数组实例,即使它们包含相同的值,也不会将===
相互比较。
试试这个:
===
由于Map类可用作基类,因此可以实现具有重写var a = new Map(), key = ['x', 'y'];
a.set(key, 1);
console.log(a.get(key));
函数的子类。
您需要保存对用作键的.get()
的非原始实例的引用。请注意以下两个示例中的区别:
Array
我也有这个需求,所以我写了一个ISC许可的库:"use strict";
var a = new Map();
a.set(['x','y'], 1);
console.log(a.get(['x','y']));
console.log(['x','y'] === ['x','y']);
var b = new Map();
var array = ['x','y'];
b.set(array, 1);
console.log(b.get(array));
console.log(array === array);
。你可以array-keyed-map。我认为find it on npm非常清楚,但无论如何,对于后人来说,这是它的工作原理:
保持一棵the source物体。每棵树都存储:
- 在内部声明的
Map
键下:树中该点的值(如果有的话)。Symbol
保证唯一性,因此用户提供的值不能覆盖此密钥。 - 在所有其他键上:所有其他远程设置此树的下一个树。
例如,在Symbol
上,内部树结构就像 -
akmap.set(['a', 'b'], true)
之后执行'a':
[value]: undefined
'b':
[value]: true
只会改变akmap.set(['a'], 'okay')
路径的值:
'a'
要获取数组的值,请在读取树中的相应键时迭代数组。如果树在任何点都不存在,则返回'a':
[value]: 'okay'
'b':
[value]: true
。最后,阅读你已经到过的树上的内部声明的undefined
符号。
要删除数组的值,请执行相同的操作但删除[value]
-symbol-key下的任何值,并在递归步骤后删除任何子树,如果它们的[value]
为0。
为什么一棵树?因为当多个阵列具有相同的前缀时非常有效,这在实际使用中是非常典型的,因为它可以用于例如文件路径。
以上是关于使用Array对象作为ES6 Map的键的主要内容,如果未能解决你的问题,请参考以下文章