JavaScript Set及其应用 去重,交集,并集,差集

Set

之前学习了Set,好久没用又忘了,现在复习一遍,做个记录,方便以后查阅

先打印一下Set实例,看看里面都有些什么

Set类

Set类的构造函数是Set()本身,可以传入参数对Set实例进行初始化,但是这个参数必须实现了Iterable接口,Array、Map、Set都实现了iterable接口。这意味着这三种类型都可以用于Set实例的初始化。

Set集合的特点

  • Set存储的值唯一且不重复,可以用于去重
  • Set没有键,因此keys/values都将返回相同的结果(一个setIterator,迭代器对象),可以用forof和forEach取值

关于Iterable

iterable,可迭代的。这是ES6引入的新类型,具有iterable类型的集合可以通过forin循环来遍历

创建Set实例

分别用Array、Map、Set传入构造实例化Set

createSet=(param)=>{
    return new Set(param)
}

//用数组实例化Set
let param1 = [1,2,3]
console.log(createSet(param1))//Set(3) {1, 2, 3}

//Map
let param2 = new Map().set('a',1).set('b',2)
console.log(createSet(param2))//Set(2) {Array(2), Array(2)}

//Set
let param3 = new Set([1,2,3]);
console.log(createSet(param3))//Set(3) {1, 2, 3}

Set API

  • size 返回Set存储的值的个数

遍历

  • keys()
  • values()
  • entries()
  • forEach()

增删改查

  • add(value): 返回set自身
  • delete(value):删除,返回布尔值
  • has(value):返回布尔值
  • clear():清除所有成员

遍历

//遍历set
let set = new Set([1, '1', '-1', -1, 'mmm'])
let setIterator = set.keys();
setIterator = set.values();
// setIterator = set.entries()//5个键值对数组,键和值相同
for (const value of setIterator) {
    console.log(value)
}
set.forEach((v,i) => {
    console.log(v,i)
});

增删改查

//增,返回值是set
set.add('new1')
//删,返回bool
set.delete('new1')
//是否存在,返回bool
console.log(set.has('new1'))
//清除全部,没有返回值
set.clear()
console.log(set)

Set的应用,去重,交集,并集,差集

//测试用例
let a = [1, 2, 3, 4, 5]
let b = [3, 4, 5, 6, 7]

//去重
function distinct(arr) {
    return [...new Set(arr)]
}

//并集,讲两个数组分别结构到set的构造种
function merge(arr1, arr2) {
    return new Set([...arr1, ...arr2])
}

//交集
function unite(arr1, arr2) {
    return new Set([...arr1].filter(v=>arr2.some(v2=>v2===v)))
}

//差集,某个数组减去交集
function difference(arr1, arr2) {
    let un = merge(arr1,arr2)
    let itsct = unite(arr1, arr2);
    //整体差集
    return new Set([...un].filter(v=>!itsct.has(v)))
    //相对差集
    // return new Set([...arr1].filter(v => !itsct.has(v)))
}

console.log('distinction is ', distinct([1, 1, 1, 1, 1]))
console.log('merge is ', merge(a, b))
console.log('unite is ', unite(a, b));
console.log('difference is ',difference(b,a));

posted @ 2020-06-02 15:44  IslandZzzz  阅读(1245)  评论(0编辑  收藏  举报