成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

一起來用js實現(xiàn)一個Set 類

ChanceWong / 577人閱讀

摘要:基礎知識集合是由一組無序且唯一即不能重復的項組成的。還有一個概念叫空集。接下來我們實現(xiàn)對應的方法向集合添加一個新的值刪除集合中的一個值檢測一個值是否在集合中返回清空集合返回集合的數(shù)量返回一個包含所有值的數(shù)組方法實現(xiàn)首先要實現(xiàn)的是方法。

基礎知識:

集合是由一組無序且唯一(即不能重復)的項組成的。在數(shù)學中,集合是一組不同的對象(的集)。比如說,

一個由大于或等于0的整數(shù)組成的自然數(shù)集合:N= {0, 1, 2, 3, 4, 5, 6, …}。

集合中的對象列表用“{}”(大括號)包圍。還有一個概念叫空集??占褪遣话魏卧氐募稀1热?4和29之間的素數(shù)集合。由于24和29之間沒有素數(shù)(除了1和自身,沒有其他正因數(shù)的大于1的自然數(shù)),這個集合就是空集??占谩皗 }”表示。你也可以把集合想象成一個既沒有重復元素,也沒有順序概念的數(shù)組。在數(shù)學中,集合也有并集、交集、差集等基本操。

創(chuàng)建集合

首先我們創(chuàng)建骨架如下:

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

這里也可以用數(shù)組來保存,JS對象具有不允許一個鍵指向兩個不同的屬性,保證了集合里的元素都是唯一的。
接下來我們實現(xiàn)對應的方法:

add(value) :向集合添加一個新的值

delete(value) : 刪除集合中的一個值

has(value) : 檢測一個值是否在集合中 返回 true/false

clear() :清空集合

size() : 返回集合的數(shù)量

values() : 返回一個包含所有值的數(shù)組

has() 方法實現(xiàn)

首先要實現(xiàn)的是has(value)方法。這是因為它會被add、remove等其他方法調(diào)用。如下:

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)


clear效果

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()

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();

接下來我們來實現(xiàn) 交集 并集 差集 子集

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/104012.html

相關文章

  • 實現(xiàn) Vue 的 MVVM 框架

    摘要:原文地址一個框架一個響應式的組件系統(tǒng),通過把頁面抽象成一個個組件來增加復用性降低復雜性主要特色就是數(shù)據(jù)操縱視圖變化,一旦數(shù)據(jù)變化自動更新所有關聯(lián)組件所以它的一大特性就是一個數(shù)據(jù)響應系統(tǒng),當然有了數(shù)據(jù)還需要一個模板解析系統(tǒng)即幫我們把數(shù)據(jù)模板生 原文地址:https://gmiam.com/post/evo.html Vue 一個 MVVM 框架、一個響應式的組件系統(tǒng),通過把頁面抽象成一個...

    BaronZhang 評論0 收藏0
  • CQRS框架(nodejs的DDD開發(fā)落地框架)初識感想

    摘要:中的事件的一個,我暫且理解為一個中的和這兩個屬性已經(jīng)在框架中直接掛載在了對象上,歸功于曾老師。 CQRS是啥?DDD又是啥? 這兩個概念其實沒什么神秘的,當然此文章中的這兩個概念以曾老師的課程為準(關于CQRS和DDD的標準概念,google上已經(jīng)很多了,不再贅述。) DDD(Domain Driven Design),領域驅動設計開發(fā)。 DDD和OOP有什么同嗎?其實就我個人經(jīng)驗來說...

    zhoutk 評論0 收藏0
  • 從零到有模擬實現(xiàn)Set

    摘要:過濾掉和簡單判斷是否是迭代器對象模擬行為對迭代器對象進行遍歷操作??吹竭@里你可能已經(jīng)知道了,要實現(xiàn)的功能之一就是提供一個迭代器。原文鏈接參考迭代器和生成器系列之模擬實現(xiàn)一個數(shù)據(jù)結構展開語法循環(huán) 前言 es6新增了Set數(shù)據(jù)結構,它允許你存儲任何類型的唯一值,無論是原始值還是對象引用。這篇文章希望通過模擬實現(xiàn)一個Set來增加對它的理解。 原文鏈接 用在前面 實際工作和學習過程中,你可能也...

    PAMPANG 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<