集合
2020-05-31 本文已影响0人
skoll
简介
1 .集合的成员是无限的
2 .集合中的成员都是唯一的
3 .
集合的操作
1 .合并
2 .交集
3 .补集
es6有专门的内置的结构,不用自己写了
const s=new Set()
// 定义set
// 1.可以接受一个数组,或者其他具有iterable接口的其他数据结构作为参数
// const divs=new Set(document.querySelectorAll('.div'))
let old=[1,2,3,4,5,1,2]
// 2.去重
// 2.1去重数组
// console.log([...new Set(old)])
let str='aabbc'
//2.2去重字符串
// console.log([...new Set(str)].join(''))
old.map((v)=>{
s.add(v)
})
// 3.添加数据
// 3.1向set添加数据的时候,不会发生类型转换,所以5,"5"是不同的值,set用来判断两个值是否不同。类似于===
// 3.2添加对象总是成功的,因为他会认为两个对象总是不相等的
// console.log(s)
// 属性
// 返回set里面数据的成员
// console.log(s.size)
// 方法
// 操作方法
//添加
s.add("hello")
// 删除
s.delete("hello")
// 判断是否是成员
// console.log(s.has("hello"))
// 清除
// s.clear()
// set转换为array
// console.log([...s])
// console.log(Array.from(s))
// 遍历方法
// 1 .set的遍历顺序就是插入顺序,所以这个可以做成有序的对象
// for(let x of s){
// console.log(x)
// }
// s.forEach((x)=>{
// console.log(x)
// })
// s.map((x)=>{
// console.log(x)
// })
// 这个是不行的
// 必须这样转一下,用一个第三方的操作
let sArray=[...s]
// sArray.map((x)=>{
// console.log(x)
// })
Set.prototype.union=function(arr1,arr2){
return new Set([...arr1,...arr2])
}
// 交集
function intersect(a,b){
return new Set([...a].filter(x=>b.has(x)))
}
// 补集
function difference(a,b){
return new Set([...a].filter(x=>!b.has(x)))
}
console.log(s.union([1,2],[3,4]))
let a=new Set([1,2,3])
let b=new Set([2,3,4])
console.log(difference(a,b))
console.log(intersect(a,b))