Skip to content

第六章 Set

基础

set 集合类型,包含了集合的性质。

唯一性 不可放重复数据

js
set是类型严格约束
声明语句: let set = new Set();
追加: set.add()
set无key和索引,所以使用数组和对象的key和索引方法的时候都是针对set的值
与对象的区别:
		对象中的属性都会转化为字符串,类似
		let obj = {
		1: "abc",
		"1":"cde"
		}

这样子是相同的东西,后边的"1"会覆盖掉前边的。
对象里使用变量需要加上[],是key加上[]。
比如:
let new_obj = {
    [obj]: "content"
}
而对象是不能变成属性的,所以这一部分js内部实现机制是:
obj.toString  =>  添加属性

小结:
类型不同的时候可以存在多个,类型相同不能同时存在
js
数量判断: ~.size()
判断是否有: ~.has()
删除: ~.delete()
清空:~.clear()
当传参为字符串时,会将字符串展开
例如: let set = new Set("abc") =>("a","b","c")

使用场景

去重,直接去重

js
let arr = [1,23,352,412,4,1,4,23,352]
        array = [...new Set(arr)];

转换

js
使用.from 转换为数组

遍历

js
~.keys()或者~.values()或者~.entries    取值
 
关键词处理
let obj = {
            data: new Set(),
            set keyword(word) {
                this.data.add(word);
            },
            show() {
                let ul = document.querySelector('[name="dem"]')
                ul.innerHTML = '';
                this.data.forEach(function (value) {
                    ul.innerHTML += `<li>${value}</li>`;
                })
            }
        }
        let input = document.querySelector("[name='dem2']");
        input.addEventListener("blur", function () {
            obj.keyword = this.value;
            obj.show();
        })

并集交集补集

js
let A = [1,2,3,4,55,512,123,2]
        let B = [55,4,1,4,234,5,]
        let a = new Set(A);
        let b = new Set(B);
        console.log(new Set([...a,...b]))

let A = new Set([1, 2, 3, 4, 55, 512, 123, 2,5]);
        let B = new Set([55, 4, 1, 4, 234, 5,]);
        // let a = new Set(A);
        // let b = new Set(B);
        // console.log(new Set([...a,...b]))
        console.log(new Set([...A].filter(function (item) {
            return B.has(item);
        })))

WeakSet

javascript
与Set类型一样,不能有重复的值(针对引用类型)。
let set = new WeakSet(["a","b"]);这样是报错的,因为[]内无论多少个值,都会被当称字符串
键必须为对象
需要改成:
let set = WeakSet();
set.add([blabla]);

Dom元素&节点对象,

引用类型垃圾回收

js
赋值为空&删除:
let variable = null;

引用类型的垃圾回收机制就是根据引用次数是否为0,而进行是否在内存中所删除或者继续留着varibale
每当引用类型进行传址时,都会计算+1

WeakSet特性

JavaScript
对弱引用有影响的都不能使用的都用不了。
只用来保存对象数据,没有其它特殊功能。
弱引用类型,keys,values等都无法使用