摘要:讀書筆記實(shí)現(xiàn)集合目標(biāo)學(xué)習(xí)如何創(chuàng)建集合,添加移除值搜索是否存在學(xué)習(xí)如何做并集交集差集的數(shù)據(jù)操作學(xué)習(xí)如何使用的類集合是無順序不重復(fù)的的項(xiàng)組成的數(shù)據(jù)結(jié)構(gòu)。
讀書筆記-JavaScript實(shí)現(xiàn)「集合」
目標(biāo)
學(xué)習(xí)如何創(chuàng)建集合,添加、移除值、搜索是否存在
學(xué)習(xí)如何做并集、交集、差集的數(shù)據(jù)操作
學(xué)習(xí)如何使用 ES6 的 Set 類
集合是無順序、不重復(fù)的的項(xiàng)組成的數(shù)據(jù)結(jié)構(gòu)。與數(shù)學(xué)中的有限集合是通過一個(gè)概念
ES6 原生的 Set 就是「集合」,原生的 Map 就是「字典」
6.2 實(shí)現(xiàn)與 ES6 的 Set 相似的一個(gè)集合結(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); }); // 因?yàn)閍dd時(shí),會(huì)用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); }); }; }
試一試,代碼能否正常運(yùn)行
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); }); // 因?yàn)閍dd時(shí),會(huì)用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; };
試一試,是否實(shí)現(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; };
試一試,是否實(shí)現(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); }); };
試一試,是否實(shí)現(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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/108714.html
摘要:集合是由一組無序且唯一的的項(xiàng)組成的方法描述備注向集合添加一個(gè)新的項(xiàng)從集合移除一個(gè)項(xiàng)判斷集合中是否存在某項(xiàng)移除集合中所有項(xiàng)返回集合中所有值組成的數(shù)組返回集合所包含元素的數(shù)量交集并集差集子集的實(shí)現(xiàn)差集對(duì)于給定的兩個(gè)集合,返回一個(gè)包含所有存在于第 集合是由一組無序且唯一的的項(xiàng)組成的 function Set(){ let item = {}; this.has = funct...
摘要:技巧使你的更加專業(yè)這是上關(guān)于技巧的一篇譯文,另外你也可以在本項(xiàng)目看到原文。列舉了一些很實(shí)用的技巧,比如給空內(nèi)容的標(biāo)簽添加內(nèi)容,逗號(hào)分隔列表等等。排序算法看源碼,把它背下來吧排序算法的封裝。主要幫助初學(xué)者更好的掌握排序算法的實(shí)現(xiàn)。 成為專業(yè)程序員路上用到的各種優(yōu)秀資料、神器及框架 成為一名專業(yè)程序員的道路上,需要堅(jiān)持練習(xí)、學(xué)習(xí)與積累,技術(shù)方面既要有一定的廣度,更要有自己的深度。 Java...
摘要:技巧使你的更加專業(yè)這是上關(guān)于技巧的一篇譯文,另外你也可以在本項(xiàng)目看到原文。列舉了一些很實(shí)用的技巧,比如給空內(nèi)容的標(biāo)簽添加內(nèi)容,逗號(hào)分隔列表等等。排序算法看源碼,把它背下來吧排序算法的封裝。主要幫助初學(xué)者更好的掌握排序算法的實(shí)現(xiàn)。 成為專業(yè)程序員路上用到的各種優(yōu)秀資料、神器及框架 成為一名專業(yè)程序員的道路上,需要堅(jiān)持練習(xí)、學(xué)習(xí)與積累,技術(shù)方面既要有一定的廣度,更要有自己的深度。 Java...
摘要:筆者作為一位,將工作以來用到的各種優(yōu)秀資料神器及框架整理在此,畢竟好記性不如爛鍵盤,此前端知識(shí)點(diǎn)大百科全書前端掘金,,不定期更新技巧前端掘金技巧,偶爾更新。計(jì)算數(shù)組的極值技巧使你的更加專業(yè)前端掘金一個(gè)幫你提升技巧的收藏集。 CSS 樣式畫各種圖形 - 前端 - 掘金下面是一些我在 CSS 中經(jīng)常用到的圖案,還有一些是在css-tricks看到的。記錄一下,以后會(huì)用到。會(huì)持續(xù)更新… 一、...
摘要:筆者作為一位,將工作以來用到的各種優(yōu)秀資料神器及框架整理在此,畢竟好記性不如爛鍵盤,此前端知識(shí)點(diǎn)大百科全書前端掘金,,不定期更新技巧前端掘金技巧,偶爾更新。計(jì)算數(shù)組的極值技巧使你的更加專業(yè)前端掘金一個(gè)幫你提升技巧的收藏集。 CSS 樣式畫各種圖形 - 前端 - 掘金下面是一些我在 CSS 中經(jīng)常用到的圖案,還有一些是在css-tricks看到的。記錄一下,以后會(huì)用到。會(huì)持續(xù)更新… 一、...
閱讀 3821·2021-09-09 09:33
閱讀 3133·2019-08-30 15:56
閱讀 3104·2019-08-30 15:56
閱讀 3390·2019-08-30 15:55
閱讀 567·2019-08-30 15:53
閱讀 2237·2019-08-30 15:52
閱讀 725·2019-08-28 18:16
閱讀 2542·2019-08-26 13:51