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

資訊專欄INFORMATION COLUMN

《Javascript數(shù)據(jù)結(jié)構(gòu)和算法》筆記-「集合」

Donne / 3171人閱讀

摘要:讀書筆記實現(xiàn)集合目標(biāo)學(xué)習(xí)如何創(chuàng)建集合,添加移除值搜索是否存在學(xué)習(xí)如何做并集交集差集的數(shù)據(jù)操作學(xué)習(xí)如何使用的類集合是無順序不重復(fù)的的項組成的數(shù)據(jù)結(jié)構(gòu)。

讀書筆記-JavaScript實現(xiàn)「集合」

目標(biāo)

學(xué)習(xí)如何創(chuàng)建集合,添加、移除值、搜索是否存在

學(xué)習(xí)如何做并集、交集、差集的數(shù)據(jù)操作

學(xué)習(xí)如何使用 ES6 的 Set 類

集合是無順序、不重復(fù)的的項組成的數(shù)據(jù)結(jié)構(gòu)。與數(shù)學(xué)中的有限集合是通過一個概念

ES6 原生的 Set 就是「集合」,原生的 Map 就是「字典」

6.2 實現(xiàn)與 ES6 的 Set 相似的一個集合結(jié)構(gòu)
function Set() {
    let items = {};

    this.has = function(value) {
        // 根據(jù)in操作符不同,hasOwenProperty只檢測自有屬性,忽略原型鏈
        return items.hasOwnProperty(value);
    };

    this.add = function(value) {
        if (!this.has(value)) {
            items[value] = value;
            return true;
        } else {
            return false;
        }
    };

    this.remove = function(value) {
        if (this.has(value)) {
            delete items[value];
            return true;
        }
        return false;
    };

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

    this.size = function() {
        return Object.keys(items).length;
    };

    this.values = function() {
        return Object.values(items);
    };

    // 并集操作
    this.union = function(otherSet) {
        let unionSet = new Set();
        this.values().forEach(value => {
            unionSet.add(value);
        });

        // 因為add時,會用has判斷,是否重復(fù)的元素不再push
        otherSet.values().forEach(value => {
            unionSet.add(value);
        });
        return unionSet;
    };

    // 交集操作
    this.intersection = function(otherSet) {
        let intersectionSet = new Set();
        this.values().forEach(value => {
            if (otherSet.has(value)) {
                unionSet.add(value);
            }
        });
        return intersectionSet;
    };

    // 判斷A是否是B的子集
    this.subset = function(otherSet) {
        return this.values().every(value => {
            return otherSet.has(value);
        });
    };
}

試一試,代碼能否正常運行

let set = new Set();
set.add(1);
console.log(set.values());
console.log(set.has(1));
console.log(set.size());
set.add(2);
console.log(set.values());
console.log(set.has(2));
console.log(set.size());

set.remove(1);
console.log(set.values());
set.remove(2);
console.log(set.values());
拓展集合操作 并集、交集、差集
并集操作
// 并集操作
this.union = function(otherSet) {
    let unionSet = new Set();
    this.values().forEach(value => {
        unionSet.add(value);
    });

    // 因為add時,會用has判斷,是否重復(fù)的元素不再push
    otherSet.values().forEach(value => {
        unionSet.add(value);
    });
    return unionSet;
};

試一試,代碼做了并集操作

let set1 = new Set();
set1.add(1);
let set2 = new Set();
set1.add(2);

console.log(set1.union(set2).values());
交集操作
this.intersection = function(otherSet) {
    let intersectionSet = new Set();
    this.values().forEach(value => {
        if (otherSet.has(value)) {
            unionSet.add(value);
        }
    });
    return intersectionSet;
};

試一試,是否實現(xiàn)了交集操作

let set1 = new Set();
set1.add(1);
set1.add(2);
let set2 = new Set();
set2.add(2);

console.log(set1.values());
console.log(set2.values());
console.log(set1.intersection(set2).values());
差集操作
// 差集
this.difference = function(otherSet) {
    let differenceSet = new Set();
    this.values().forEach(value => {
        if (!otherSet.has(value)) {
            differenceSet.add(value);
        }
    });
    return differenceSet;
};

試一試,是否實現(xiàn)了差集操作

let set1 = new Set();
set1.add(1);
set1.add(2);
let set2 = new Set();
set2.add(2);

console.log(set1.values());
console.log(set2.values());
console.log(set1.difference(set2).values());
判斷是否是子集的操作
// 判斷是否是子集的操作
this.subset = function(otherSet) {
    return this.values().every(value => {
        return otherSet.has(value);
    });
};

試一試,是否實現(xiàn)了判斷子集操作

let set1 = new Set();
set1.add(1);
let set2 = new Set();
set2.add(1);
set2.add(2);

console.log(set1.values());
console.log(set2.values());
console.log(set1.subset(set2));

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/108714.html

相關(guān)文章

  • JavaScript數(shù)據(jù)結(jié)構(gòu)算法筆記——第6章 集合

    摘要:集合是由一組無序且唯一的的項組成的方法描述備注向集合添加一個新的項從集合移除一個項判斷集合中是否存在某項移除集合中所有項返回集合中所有值組成的數(shù)組返回集合所包含元素的數(shù)量交集并集差集子集的實現(xiàn)差集對于給定的兩個集合,返回一個包含所有存在于第 集合是由一組無序且唯一的的項組成的 function Set(){ let item = {}; this.has = funct...

    darcrand 評論0 收藏0
  • CSS技巧

    摘要:技巧使你的更加專業(yè)這是上關(guān)于技巧的一篇譯文,另外你也可以在本項目看到原文。列舉了一些很實用的技巧,比如給空內(nèi)容的標(biāo)簽添加內(nèi)容,逗號分隔列表等等。排序算法看源碼,把它背下來吧排序算法的封裝。主要幫助初學(xué)者更好的掌握排序算法的實現(xiàn)。 成為專業(yè)程序員路上用到的各種優(yōu)秀資料、神器及框架 成為一名專業(yè)程序員的道路上,需要堅持練習(xí)、學(xué)習(xí)與積累,技術(shù)方面既要有一定的廣度,更要有自己的深度。 Java...

    DangoSky 評論0 收藏0
  • CSS技巧

    摘要:技巧使你的更加專業(yè)這是上關(guān)于技巧的一篇譯文,另外你也可以在本項目看到原文。列舉了一些很實用的技巧,比如給空內(nèi)容的標(biāo)簽添加內(nèi)容,逗號分隔列表等等。排序算法看源碼,把它背下來吧排序算法的封裝。主要幫助初學(xué)者更好的掌握排序算法的實現(xiàn)。 成為專業(yè)程序員路上用到的各種優(yōu)秀資料、神器及框架 成為一名專業(yè)程序員的道路上,需要堅持練習(xí)、學(xué)習(xí)與積累,技術(shù)方面既要有一定的廣度,更要有自己的深度。 Java...

    zgbgx 評論0 收藏0
  • CSS技巧 - 收藏集 - 掘金

    摘要:筆者作為一位,將工作以來用到的各種優(yōu)秀資料神器及框架整理在此,畢竟好記性不如爛鍵盤,此前端知識點大百科全書前端掘金,,不定期更新技巧前端掘金技巧,偶爾更新。計算數(shù)組的極值技巧使你的更加專業(yè)前端掘金一個幫你提升技巧的收藏集。 CSS 樣式畫各種圖形 - 前端 - 掘金下面是一些我在 CSS 中經(jīng)常用到的圖案,還有一些是在css-tricks看到的。記錄一下,以后會用到。會持續(xù)更新… 一、...

    Jonathan Shieber 評論0 收藏0
  • CSS技巧 - 收藏集 - 掘金

    摘要:筆者作為一位,將工作以來用到的各種優(yōu)秀資料神器及框架整理在此,畢竟好記性不如爛鍵盤,此前端知識點大百科全書前端掘金,,不定期更新技巧前端掘金技巧,偶爾更新。計算數(shù)組的極值技巧使你的更加專業(yè)前端掘金一個幫你提升技巧的收藏集。 CSS 樣式畫各種圖形 - 前端 - 掘金下面是一些我在 CSS 中經(jīng)常用到的圖案,還有一些是在css-tricks看到的。記錄一下,以后會用到。會持續(xù)更新… 一、...

    SHERlocked93 評論0 收藏0

發(fā)表評論

0條評論

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