set和map

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方法,这里就不再做赘述。

上一篇:02 css实现举例


下一篇:POJ 3080 Blue Jeans KMP