1、Map对象

Map对象是一个简单的键/值映射。任何值(包括对象和原始值)都可以用作一个键或一个值。

使用set方法,将对象o当作m的一个键。将对象o当作m的一个键

var m = new Map();
var o = {p: "Hello World"};
m.set(o, "content")
m.get(o) // "content"

Map也可以接受一个数组作为参数。该数组的成员是一个个表示键值对的数组。

var map = new Map([["name", "张三"], ["title", "Author"]]);
map.size // 2
map.get("name") // "张三"
map.get("title") // "Author"

使用Map对象需要注意以下几点:
  (1)Map的键实际上是跟内存地址绑定的,只要内存地址不一样,就视为两个键。
  (2)如果使用对象作为键名,就不用担心自己的属性与原作者的属性同名。
  (3)如果Map的键是一个简单类型的值(数字、字符串、布尔值),则只要两个值严格相等,Map将其视为一个键,
     包括0和-0。
  (4)另外,虽然NaN不严格相等于自身,但Map将其视为同一个键。

Map对象的属性和方法:

var map = new Map();
map.size                    // 返回map对象中的键/值对的数目
map.set(key, value)         // 设置键key的值为value,如果key已存在,则更新值,返回map对象
map.get(key)                // 获取键为key的值
map.has(key)                // 判断map对象是否存在键key,返回bool值
map.delete(key)             // 删除某个键,返回bool值
map.clear()                 // 清空所有键值对,没有返回值

Map对象的遍历方法:

for (var key of myMap.keys()) {         // 遍历所有键
  console.log(key);
}

for (var value of myMap.values()) {      // 遍历所有值
  console.log(value);
}

for (var item of myMap.entries()) {     // 返回所有成员的遍历器,然后遍历所有键值对
  console.log(item[0] + " = " + item[1]);
}

myMap.forEach(function(value, key) {        // map的遍历方法
  console.log(key + " = " + value);
}, myMap)

 
2、Set对象

ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。

Set本身是一个构造函数,用来生成Set数据结构,必须通过new生成实例,否则报错
Set对象的属性和方法:

let set = new Set([1,2,3,1,2,3,45,1,6,5,3])
set.constructor                     // 返回构造函数,默认就是Set函数。
set.size                            // 返回set的成员总数。
set.add(value)                      // 添加某个值,返回set对象。
set.delete(value)                   // 删除某个值,返回一个布尔值,表示删除是否成功。
set.has(value)                      // 返回一个布尔值,表示该值是否为Set的成员。
set.clear()                         // 清除所有成员,没有返回值。

Set对象的遍历方法:

let set = new Set(['red', 'green', 'blue']);
for ( let item of set.keys() ){
  console.log(item);
};
// red  green  blue

for ( let item of set.values() ){
  console.log(item);
};
// red  green  blue 

for ( let item of set.entries() ){
  console.log(item);
};
// ["red", "red"]  ["green", "green"]  ["blue", "blue"]

let set = new Set([1, 2, 3]);
set.forEach((value, key) => console.log(value * 2) )
// 2  4  6

利用Set对象清除数组里相同的值:

let arr = [1,2,3,4,5,6,6,7,8,6,4,4,5,2,3,5,6,8]
arr = [...new Set(arr)]             // [1, 2, 3, 4, 5, 6, 7, 8]