一同来用js完成一个Set 类

基础知识:

鸠合是由一组无序且唯一(即不能反复)的项构成的。在数学中,鸠合是一组差别的对象(的集)。比方说,

一个由大于或即是0的整数构成的自然数鸠合:N= {0, 1, 2, 3, 4, 5, 6, …}。

鸠合中的对象列表用“{}”(大括号)围困。另有一个观点叫空集。空集就是不包括任何元素的鸠合。比方24和29之间的素数鸠合。由于24和29之间没有素数(除了1和本身,没有其他正因数的大于1的自然数),这个鸠合就是空集。空集用“{ }”示意。你也能够把鸠合设想成一个既没有反复元素,也没有递次观点的数组。在数学中,鸠合也有并集、交集、差集等基础操。

建立鸠合

起首我们建立骨架以下:

class Set{
    constructor(){
        this.items={}
    }
}

这里也能够用数组来保留,JS对象具有不允许一个键指向两个差别的属性,保证了鸠合里的元素都是唯一的。
接下来我们完成对应的要领:

  1. add(value) :向鸠合增加一个新的值
  2. delete(value) : 删除鸠合中的一个值
  3. has(value) : 检测一个值是不是在鸠合中 返回 true/false
  4. clear() :清空鸠合
  5. size() : 返回鸠合的数目
  6. values() : 返回一个包括一切值的数组

has() 要领完成

起首要完成的是has(value)要领。这是由于它会被add、remove等其他要领挪用。以下:

class Set{
    constructor(){
        this.items={}
    }

    has(val){
        // return val in this.items;
        return this.items.hasOwnProperty(val)
    }
}

let setDemo=new Set();
//false
console.log(setDemo.has("demo"))

add() 要领

class Set{
    constructor(){
        this.items={}
    }

    has(val){
        // return val in this.items;  
        return this.items.hasOwnProperty(val)
    }
    
    add(val){
        if(!this.has(val)){
            this.items[val]=val;
            return true;
        }else{
            return false;
        }
    }
}

let setDemo=new Set();
setDemo.add("demo");
// true
console.log(setDemo.has("demo"))

remove 与 clear

用对象来存储鸠合的items对象,就能够简朴地运用delete操作符从items对象中移除属性

class Set{
    constructor(){
        this.items={}
    }

    has(val){
        // return val in this.items;  
        return this.items.hasOwnProperty(val)
    }
    
    add(val){
        if(!this.has(val)){
            this.items[val]=val;
        }
    }

    remove(val){
        if(this.has(val)){
            delete this.items[val];
        }
    }

    clear(){
        this.items = {};
    }
}

let setDemo=new Set();
setDemo.add("demo");
setDemo.add("demo1");
setDemo.add("demo2");

console.log(setDemo.has("demo"))
setDemo.remove("demo");
console.log(setDemo.has("demo"))
console.log(setDemo)
setDemo.clear();
console.log(setDemo)

《一同来用js完成一个Set 类》
clear结果
《一同来用js完成一个Set 类》

size() 要领

class Set{
    constructor(){
        this.items={}
    }

    has(val){
        // return val in this.items;  
        return this.items.hasOwnProperty(val)
    }
    
    add(val){
        if(!this.has(val)){
            this.items[val]=val;
        }
    }

    remove(val){
        if(this.has(val)){
            delete this.items[val];
        }
    }

    clear(){
        this.items = {};
    }

    size(){

        return Object.keys(this.items).length;
    }
}

let setDemo=new Set();
setDemo.add("demo");
setDemo.add("demo1");
setDemo.add("demo2");
setDemo.size()

《一同来用js完成一个Set 类》

values() 要领

class Set{
    constructor(){
        this.items={}
    }

    has(val){
        // return val in this.items;  
        return this.items.hasOwnProperty(val)
    }
    
    add(val){
        if(!this.has(val)){
            this.items[val]=val;
        }
    }

    remove(val){
        if(this.has(val)){
            delete this.items[val];
        }
    }

    clear(){
        this.items = {};
    }

    size(){

        return Object.keys(this.items).length;
    }

    values(){
        let arr=[];
        Object.keys(this.items).forEach(item=>{
            arr.push(this.items[item]);
        })
        return arr;
    }
}

let setDemo=new Set();
setDemo.add("demo");
setDemo.add("demo1");
setDemo.add("demo2");
setDemo.size();
setDemo.values();

《一同来用js完成一个Set 类》

接下来我们来完成 交集 并集 差集 子集

    原文作者:fsme
    原文地址: https://segmentfault.com/a/1190000019037658
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞