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]