ES6之Set (集合)
一:Set
集合 数据结构 集合是由一种没有重复元素且没有顺序的数组,主要用于数组去重,字符串去重。
ES6提供的Set数据结构类似于数组,且没有重复的值(多用于去重);Set本身是一个构造函数,用于生成Set数据结构与
Set实例的方法分为操作方法、遍历方法
操作方法:
add():添加值,返回Set结构本身
let set = new Set() set.add(1); console.log(set); // Set(1){1} set.add(1).add(2).add(1) console.log(set) // Set(2) {1,2} //注:拓展运算符(...)可以将Set值扩展出来 console.log(...set) // 1 2 console.lolg([...set])// 【1,2】 //以上可见Set可以将重复元素去掉
delate():删除值,并返回一个boolean 表示是否删除成功
let set = new Set() set.add(1).add(2); //添加两个值 set.delete(1); true console.log(...set) // 2 set.delete(3) // false
has():判断该值是否存在,并返回一个Boolean
let set = new Set() set.add(1).add(2); set.has(1); //true set.has(3); //false
clear():清除所有值。没有返回值
let set = new Set(); set.add(1).add(2); set.clear console.log(set,[...set]); // Set(0){} []
遍历方法:
由于Set只有键值没有键名,也可以说键和值是同一个(键、值相同,可以省略) ,所keys和values返回值相同
//keys遍历键 values遍历值,由于set结构键值相同所以打印的是同一个 let set = new Set() set.add(1).add(2).add(3); for( let i of set.keys() ){ console.log(i) } // 1 //2 //3 for(let i of set.values()) { console.log(i) } //打印结果同上
let set = new Set(); set.add('hello').add(world); for( let i of set.entries() ){ console.log(i) } //set结构 (2)【“hello”, "hello"】 // (2)[ "world","world" ] //打印键值对
forEach()
let set = new Set(); set.add('hello').add('world'); set.forEash( ( key, val ) => { console.log(key + '||' + val) } ) // hello||hello // world||world
综合以上代码,每次去Set里添加一个元素都要去使用add()方法 (实在麻烦)
Set可以接受一个数组作为参数
let arr = [ '小红', '小明', '小强', '小明' ]; let set = new Set(arr); console.log(...set) // 小红 小明 小强 (去重后返回值)
Set实现并集与交集
let arr = [ 4, 5, 6 ]; let list = [ 5, 6, 7 ]; let setA = new Set(arr); let setB = new Set(list); //并集 :集合A 与 集合B 的并集 A U B let bj= new Set([ ...setA, ...setB ]) console.log(bj) // 返回Set结构 Set(4) {4,5,6,7} //交集:集合A 与 集合B 的交集 A ∩ B //通过filter拿到符合条件的值 let jj = new Set([...setA].filter(val => setB.has(val))) console.log(jj) //Set(2) {5,6}
流水不腐,户枢不蠹