ES6地图类教程在Javascript中的应用实例

114 阅读3分钟

Es6地图类

地图是Es6版本中引入的一个新类。 其他类是Set,WeakSetWeakMap。 地图是一个有键和值的数据结构。键可以是任意的值,而值可以是一个对象或原始类型。键可以是原始类型,如字符串、数字、符号、函数、对象和日期。我们可以使用javascriptTypescript中的map来实现hashmap。它是基于插入的顺序。

Typescript没有支持Map的内置类,但是Typescript支持与ES6相同的数据结构。

通过在Typescript配置中配置Es6库,Es6类可以在Typescript中使用。在tsconfig.json文件中,添加 "lib":["es6"]或者你可以为这个类添加polyfill.js。这个例子在TypescriptJavascript中都适用。

语法

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