国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

ChanceWong / 574人閱讀

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

基礎(chǔ)知識:

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

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

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

創(chuàng)建集合

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

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

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

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

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

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

clear() :清空集合

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

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

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

首先要實(shí)現(xiàn)的是has(value)方法。這是因?yàn)樗鼤籥dd、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();

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

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/104012.html

相關(guān)文章

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

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

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

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

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

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

    PAMPANG 評論0 收藏0

發(fā)表評論

0條評論

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