Es6地图类
地图是Es6版本中引入的一个新类。 其他类是Set,WeakSet和WeakMap。 地图是一个有键和值的数据结构。键可以是任意的值,而值可以是一个对象或原始类型。键可以是原始类型,如字符串、数字、符号、函数、对象和日期。我们可以使用javascript和Typescript中的map来实现hashmap。它是基于插入的顺序。
Typescript没有支持Map的内置类,但是Typescript支持与ES6相同的数据结构。
通过在Typescript配置中配置Es6库,Es6类可以在Typescript中使用。在tsconfig.json文件中,添加 "lib":["es6"]或者你可以为这个类添加polyfill.js。这个例子在Typescript和Javascript中都适用。
语法
let/var map=new Map()
or
let/var map=new Map([iterablecollection])
例子:
var map = new Map()
map.set(new Date(), function currentTime () {})
map.set(() => 'key', { objectkey: 'objectvalue' })
map.set(Symbol('symbol'), [6, 21])
console.log(map)
输出是
0:{Fri Aug 31 2018 11:10:15 GMT+0530 (India Standard Time) => function currentTime() {}}
1:{key:() => 'key' value:{objectkey: "objectvalue"}}
2:{key:Symbol(symbol) value:(2) [6, 21]}
在对象创建过程中,用一个传递对象创建的地图对象。对象应该包含可迭代的集合,输出-[['key', 'value'], ['key', 'value']。
var map = new Map([
["key1", "value1"],
["key2", "value2"]])
console.log(map) //{"key1" => "value1", "key2" => "value2"}
使用set方法向Map添加元素
可以使用Set()方法创建地图对象并添加元素
var map = new Map()
map.set('k', 'v')
map.set('k1', 'v1')
console.log(map) //{"k" => "v", "k1" => "v1"}
方法
让我们使用new Operator来创建Map。
方法
说明
例子
设置(key,value)
将键和值添加到地图中
map.set("key1", "value");
map.set("key2", "value2");
console.log(map.size) // 2
get(key)
为给定的键获取元素。如果键不存在,则返回不确定值。
console.log(map.get("key1")) // value1
has(key)
返回true - 如果key存在于Map中,否则返回false。
console.log(map.has("key1")) // true
console.log(map.has("key45")) // false
delete(key)
从Map中删除给定键的键和值。
console.log(map) // {"key1" => "value1", "key2" => "value2"}
console.log(map.delete("key1")) // returns true if deleted
console.log(map.delete("key1231")) // returns false if key doest not exist
console.log(map) //{"key2" => "value2"}
清除()
删除地图的所有键和值
console.log(map) // {"key1" => "value1", "key2" => "value2"}
map.clear()// returns nothing
console.log(map) //{}
大小
返回Map的大小
console.log(map) // {"key1" => "value1", "key2" => "value2"}
console.log(map.size) //2
keys()
返回具有可迭代性的Map的键值集合
for (let key of map.keys()) {
console.log(key); //key1 key2
}
值()
用可迭代的Map集合返回数值
for (let value of map.values()) {
console.log(value); //value value2
}
条目()
用可迭代的Map集合返回键和值
//map entries iteration
for (let entry of map.entries()) {
console.log(entry[0], entry[1]); //key1 value key2 value2
}
forEach(calback,args)
这是另一种迭代的方式。每个元素都被应用于函数执行。
map.forEach(function(value,key){
console.log(key, value); //key1 value key2 value2
});
地图使用实例
let map = new Map();
map.set("kiran", "35");
map.set("john", "50");
map.set("tom", "45");
//map size returns
console.log(map.size);//3
//map has
console.log(map.has('kiran'));//true
console.log(map.has('asdfasd'));//false
//map keys Iteration
for (let key of map.keys()) {
console.log(key); //kiran john tom
}
//map values iteration
for (let value of map.values()) {
console.log(value); //35 50 45
}
//map entries iteration
for (let entry of map.entries()) {
console.log(entry[0], entry[1]); //kiran 35 john 50 tom 45
}
//object destructuring
for (let [key, value] of map) {
console.log(key, value); //kiran 35 john 50 tom 45
}
//Map forEach Iteration
map.forEach(function(value,key){
console.log(key, value); //kiran 35 john 50 tom 45
});
地图SameValueZero示例: 使用SameValueZero算法检查地图中的键。SameValueZero就像===运算法则的检查,但有几个不同之处
NaN不等于NAN +0等于-0
const map = new Map()
map.set(NaN, 'testvalue')
console.log(map.get(NaN)) // 'testvalue
map.set(-0, 54);
console.log(map.get(+0)) // 54
console.log(NaN === NaN) // false
console.log(+0 === -0) // true