本文主要介绍如何使用js的地图功能的详细说明。有需要的朋友可以参考一下。
是由Map ES2015引入的全局对象,
键-值对保存在映射中,任何对象(包括原始值)都可以用作键或值。
1. 构造函数Map必须用作构造函数,
新地图([可重复])
它的参数是可选的,如果提供了,它必须是一个iterable对象。
被迭代对象的迭代结果为,[key1,value1],[key2,value2],
例如
//1.该数组是一个可迭代对象。
m=新映射([[1, a],[2, b ]);//Map(2) {1=a ,2=b}
//2.生成器将返回一个iterable对象。
gen=function*(){
yield [1, a ];
yield [2, b ];
}
ITER=gen();
m=新地图(ITER);//Map(2) {1=a ,2=b}
2. 实例属性M.size用于获得密钥的数量,
m=新映射([[1, a],[2, b ]);//Map(2) {1=a ,2=b}
m.size //2
3. 实例方法(1)m.has(key),判断该键是否存在。
(2)m.get(key),取值,如果没有这个键,返回undefined(3)m.set(key,value),设置值,返回m(4)m.delete(key),如果键存在且已被删除,返回true,如果键不存在,返回false。
(5)m.clear(),删除所有键值对。
(6)m.keys(),它返回一个iterable对象,该对象包含按插入顺序迭代的所有键。
m=新映射([[1, a],[2, b ]);//Map(2) {1=a ,2=b}
[.m.keys()] //[1,2]
(7)m.value(),它返回一个iterable对象,该对象包含按插入顺序迭代的所有值。
m=新映射([[1, a],[2, b ]);//Map(2) {1=a ,2=b}
[.m.values()] //[a , b]
(8)m.entries(),返回一个iterable对象,每个元素为[key,value],遍历顺序为键的插入顺序。
m=新映射([[1, a],[2, b ]);//Map(2) {1=a ,2=b}
[.m.entries()] //[[1, a],[2, b]]
注:
获取二维数组更方便的方法是使用Array.from,它可以直接接受Map作为参数,m=新映射([[1, a],[2, b ]);//Map(2) {1=a ,2=b}
Array.from(m) //[[1, a],[2, b]]
Array.from也可以接受iterable对象,
Array.from(m.keys()) //[1,2]
Array.from(m.values()) //[a , b]
Array.from(m.entries()) //[[1, a],[2, b]]
(9)m.forEach(fn[,thisArg]),用于按照key的插入顺序遍历地图。
m=新映射([[1, a],[2, b ]);//Map(2) {1=a ,2=b}
m.forEach((value,key)={
值//a , b
按键//1,2
});
注:
第一个参数是value,第二个参数是key。除了使用m.forEach,还可以使用for来遍历Map.的,
m=新映射([[1, a],[2, b ]);
对于(第一个,共m个){
i //[1, a],[2, b]
}
4. key的相等性判断所谓的“SameValueZero”算法用于判断密钥的相等性:
(1)判断key相等时,认为NaN等于NaN。(就算楠!==南)
(2)其他种类的键由===运算符判断。
(3)目前认为0和-0相等符合ES2015规范,但会有浏览器兼容问题。
5. Map与Object对比(1)1)对象的关键字只能是字符串或符号,
而Map的键可以是任何值,包括函数、对象或者任何原语值。
(2)对于Map,可以通过size属性直接获得键的个数,
而对象需要Object.keys(xxx)。长度来间接获得
自身属性
的数字。(3)3)Map实例是一个可迭代的对象,可以直接用来遍历,
对象需要先获取其密钥,然后使用该密钥进行遍历。
(4)对象可以有原型对象,其自身属性可能会无意中与原型属性冲突。
(虽然在ES2015中,Object.create(null)可以创建一个没有原型的对象。)
(5)添加和删除映射键效率更高。
关于如何在js中使用Map函数的更多信息,请参见下面的相关链接。