ES6的Set数据结构去重复元素、求并集、交集、差集

和Map区别

Set是一种叫做集合的数据结构,Map是一种叫做字典的数据结构。集合、字典都可以存储不重复的值,集合是以[值,值]的形式存储元素,字典是以[键,值]的形式存储。

用法一

var set = new Set([1, 2, 3, 4, 2, 8, 4]); //两个2   
for (var elem of set) {   
  console.log(elem)   // 输出结果 1 2 3 4 8
}   

用法二结合.map遍历和for循环

var set = new Set();   
[1, 2, 3, 4, 2, 8, 4].map(function (elem) {   
  set.add(elem);   //遍历完用add添加至set数组中
})   
for (let elem of set) { //利用for...of循环遍历出来   
  console.log(elem)   
}   

扩展运算符

var set = new Set([1, 2, 3, 4, 2, 8, 4]);   
var arr = [...set];//扩展运算符(…)内部使用for…of循环,   
console.log(arr);   // 输出 [1,2,3,4,8] 

清空、删除

var set = new Set([1, 2, 3, 4, 2, 8, 4]);   
// set.clear(); //清空  直接就清空掉所有元素  
set.delete(8); //删除  选中元素 
var arr = [...set]; //扩展运算符(…)内部使用for…of循环,      
console.log(arr);    //上面删除了8 输出结果为 [1,2,3,4] 

判断set中是否含有

console.log(set.has(8));  //有就返回true 没有返回false

判断set中长度

console.log(set.size); 

求并集、交集、差集

并集

  let a = new Set([1, 2, 3]);  
    let b = new Set([4, 3, 2]);  
   
   let union = new Set([...a,...b]); // 把上面两个对象合到一个数组中通过扩展运算符(…)内部使用for…of循环遍历出来最后通过Set去重复就可以输出了
   console.log([...union]); //输出交集结果 [1,2,3,4]

交集

let a = new Set([1, 2, 3]);  
    let b = new Set([4, 3, 2]); 

let intersect = [...a].filter(function(elem){ //把a对象遍历出来 return b.has(elem); //把遍历出来的对象通过has判断是否与a一样,最后把一样的给返回 }); console.log(intersect); //输出结果 [2,3]

差集

  let a = new Set([1, 2, 3]);  
    let b = new Set([4, 3, 2]);  

   let difference  = [...a].filter(function(elem){
      return !b.has(elem);  //b的差集为1  首先Set已经去掉了重复的,has去掉了相同的,!取反那就是a里面b没有的,也就是差集,概念上的东西
   });
   console.log(difference); //输出结果 [1]
注意  用set处理后是set的对象形式  要转成数组使用需要 使用 Array.from(new Set([1,1,2,2,3])) 包裹一层再使用
或者 [...new Set([1,1,2,2,3])]
posted @ 2016-12-04 17:00  Model-Zachary  阅读(483)  评论(0编辑  收藏  举报