set和map
set
ES6 新的数据结构 Set 类似于数组,但是成员的值都是唯一的,没有重复的值。
Set是一个构造函数,所以生成Set结构很简单,只需要new Set()
即可,同时Set函数可以接受一个数组参数
// 利用Set结构成员值唯一的特性,可以轻松实现数组去重
let set = new Set([1,2,3,4,5,5,5])
[...set] // [1,2,3,4,5]
console.log(set.size); // size属性返回Set实例的成员总数,本例输出:5
Set结构实例有四个操作方法,分别是添加成员:add
、删除成员:delete
、判断该值是否为Set的成员:has
、清楚所有的成员:clear
let set = new Set();
set.add(1).add(2).add(2) // 注意2被添加了2次
set.size // 2
set.has(2) // true
set.has(3) // false
set.delete(2);
set.has(2) // false
set.clear()
set.size // 0
Set结构还有4个遍历的方法,分别是keys
方法、values
方法、entries
方法、forEach
方法。
let set = new Set(['red', 'green', 'blue']);
set.keys(); // SetIterator {"red", "green", "blue"}
set.values(); // SetIterator {"red", "green", "blue"}
set.entries(); // SetIterator {"red" => "red", "green" => "green", "blue" => "blue"}
// 可以看到keys方法、values方法、entries方法返回的都是遍历器对象。由于Set结构键名和键值是同一个值,所以keys方法和values方法的行为是一致的。
set.forEach((value,key,s) => {
console.log(key + ' : ' + value);
console.log(s);
// red : red
// Set(3) {"red", "green", "blue"}
// green : green
// Set(3) {"red", "green", "blue"}
// blue : blue
// Set(3) {"red", "green", "blue"}
})
// 和数组的forEacch方法类似,Set结构的forEach方法同样接收三个参数,依次是键值、键名、集合本身。
map
ES6为什么要引入Map结构?因为传统的对象(Object)只能使用字符串当做键(key),为了解决这个问题,ES6 提供了 Map 数据结构。Map的键范围可以是各种类型的值。
const map = new Map();
const obj = {say: 'Hello World!'};
map.set(obj,'some string');
map.get(obj) // some string
// 对比传统的对象
const data = {};
data[obj] = 'some string';
data['[object Object]'] // some string
Map结构有如下的操作方法
const map = new Map();
const k1 = ['k1'];
// 添加成员:Map.prototype.set(key, value)
map.set(k1,'values');
// 读取成员:Map.prototype.get(key)
map.get(k1); // values
// 判断键是否在Map对象中:Map.prototype.has(key)
map.has(k1); // true
// 删除某个键:Map.prototype.delete(key)
// 清空Map的所有成员:Map.prototype.clear()
Map的遍历方法和Set结构的一样,分别为keys
方法、values
方法、entries
方法、forEach
方法,这里就不再做赘述。