摘要:我對集合的學習第一步知道相關概念集合是由一組無序且唯一的項組成的,在中已經(jīng)實現(xiàn)了類似的類。就是集合第二步實現(xiàn)相關操作方法首先實現(xiàn)方法,判斷值是否在集合中,返回布爾值。操作符還有另外一種實現(xiàn)方法,方法返回表明一個對象是否具有特定屬性的布爾值。
我對集合的學習 第一步知道相關概念
集合是由一組無序且唯一的項組成的,在ES6中已經(jīng)實現(xiàn)了類似的Set類。
function Set() { var items = {}; //items就是集合 }第二步實現(xiàn)相關操作方法
首先實現(xiàn)has(value)方法,判斷值是否在集合中,返回布爾值。因為集合是不允許重復元素存在的,其他方法調(diào)用這個方法判斷是否值已存在。
this.has = function(value) { return value in items; //in操作符 };
還有另外一種實現(xiàn)方法,hasOwnProperty()方法返回表明一個對象是否具有特定屬性的布爾值。
this.has = function(value) { return items.hasOwnProperty(value); };
接下來實現(xiàn)add()方法,向集合中添加一個新的項。
this.add = function(value) { if(!this.has(value)) { //判斷要添加的元素是否已經(jīng)存在 items[value] = value; //注意同時作為鍵和值保存,有利于查找這個值 return true; } return false; //添加的元素已經(jīng)存在,不再添加 };
接下來實現(xiàn)remove()方法,從集合中移除一個值。
this.remove = function(value) { if(this.has(value)) { delete items[value]; //刪除對象的屬性 return true; } return false; };
接下來實現(xiàn)clear()方法,移除集合所有值。
this.clear = function() { items = {}; //空對象重新賦值給它 };
接下來實現(xiàn)size()方法,返回集合中有多少項。
第一種實現(xiàn)方法,使用一個length變量
第二種實現(xiàn)方法,使用Object.keys()
this.size = function() { return Object.keys(items).length; //返回一個對象的所有可枚舉的屬性名組成的數(shù)組,但不包括原型中的屬性,也不能保證按照順序輸出屬性名 };
第三種實現(xiàn)方法,手動提取items對象的每一個屬性,記錄個數(shù)
this.size = function() { var count = 0; for(var prop in items) { //遍歷items的所有屬性 if(items.hasOwnProperty(prop)) { //防止計數(shù)時計算到原型的屬性 ++count; } } return count; };
實現(xiàn)values()方法,返回所有值組成的數(shù)組。
this.values = function() { return Object.keys(items); //獲得鍵也就獲得了值(因為他們一樣啊) };第三步簡單使用Set類
var set = new Set(); set.add(1); console.log(set.values()); //["1"] console.log(set.has(1)); //true console.log(set.size()); //1 set.add(2); console.log(set.values()); //["1", "2"] set.remove(1); console.log(set.values()); //["2"]第四步操作集合
并集:兩個集合,返回一個包含兩個集合中所有元素的新集合
可以用來合并兩個元素,而且保證了單一性。
this.union = function(otherSet) { var unionSet = new Set(); //并集結(jié)果 var values = this.values(); for(var i = 0; i < values.length; i++) { //遍歷第一個集合全部放到新集合 unionSet.add(values[i]); } values = otherSet.values(); for(var i = 0; i < values.length; i++) { //遍歷第二個集合全部放到新集合,使用了add方法保證了單一性 unionSet.add(values[i]); } return unionSet; }
交集:兩個集合,返回一個包含兩個集合中共有元素的新集合
可以用來取兩者共有的部分。
this.intersection = function(otherSet) { var intersectionSet = new Set(); var values = this.values(); for(var i = 0; i < values.length; i++) { if(otherSet.has(values[i])) { intersectionSet.add(values[i]) } } return intersectionSet; }
差集:元素存在于A且不存在于B中
this.difference = functiong(otherSet) { var differenceSet = new Set(); var values = this.values(); for(var i = 0; i < values.length; i++) { //遍歷了A if(!otherSet.has(values[i])) { differenceSet.add(values[i]); } } return differenceSet; }
子集:A中的每一個元素都在B中
this.subset = function(otherSet) { if(this.size() > otherSet.size()) return false; var values = this.values(); for(var i = 0; i < values.length; i++) { if(!otherSet.has(values[i])) { //只要有一個A中的元素不在B中,返回false return false; } } return true; }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/82137.html
摘要:我對字典的簡單學習字典的概念集合字典和散列表都可以來存儲不重復的值。字典也被稱為映射。中有集合類的實現(xiàn),也有字典類的實現(xiàn)。相關操作方法實現(xiàn)方法,判斷某個鍵值是否在這個字典中,有則返回。實現(xiàn)方法,將字典所有的值以數(shù)組的形式返回。 我對JS字典的簡單學習 字典的概念 集合、字典和散列表都可以來存儲不重復的值。在集合中我們使用[值,值]來保存,在字典和散列表中使用[鍵,值]來存儲數(shù)據(jù)。 字典...
摘要:我對棧的學習因為是個新手,所以都是最簡單的知識學習梳理。棧是一種遵從后進先出原則的有序集合,新添加的或者待刪除的元素都保留在棧的末尾,稱作棧頂,另一端叫做棧底。棧的學習棧的創(chuàng)建創(chuàng)建一個類來表示棧。對于棧來說只能用和方法來進行添加和刪除元素。 我對棧的學習 因為是個新手,所以都是最簡單的知識學習梳理。 什么是棧 數(shù)組是計算機科學中最常用的數(shù)據(jù)結(jié)構(gòu),是數(shù)據(jù)元素的集合。有時候我們需要一種添加...
摘要:我對鏈表的學習什么是鏈表要存儲多個元素,數(shù)組可能是最常用的數(shù)據(jù)結(jié)構(gòu)。鏈表的學習創(chuàng)建一個鏈表各種方法表示要加入列表的項,它包含一個屬性以及一個屬性,表示要添加到列表的值,表示指向列表下一個節(jié)點項的指針。 我對JS鏈表的學習 什么是鏈表 要存儲多個元素,數(shù)組可能是最常用的數(shù)據(jù)結(jié)構(gòu)。這種數(shù)據(jù)結(jié)構(gòu)非常方便,但是有一個缺點:從數(shù)組的起點或者中間插入或移除項的成本非常高,因為需要移動元素(比如你插...
摘要:對散列表的簡單學習類也叫類,是類的一種散列表實現(xiàn)方式。鍵值散列函數(shù)散列值形成散列表地址數(shù)據(jù)鍵值對相關操作方法創(chuàng)建一個散列表實現(xiàn)一個散列函數(shù),即將碼值相加的方法。 對JS散列表的簡單學習 HashTable類也叫HashMap類,是Dictionary類的一種散列表實現(xiàn)方式。 散列算法的作用是盡可能快的在數(shù)據(jù)結(jié)構(gòu)中找到一個值。 在之前的學習中,如果你想要獲得數(shù)據(jù)結(jié)構(gòu)中的一個值,需要遍歷整...
摘要:官網(wǎng)地址聊天機器人插件開發(fā)實例教程一創(chuàng)建插件在系統(tǒng)技巧使你的更加專業(yè)前端掘金一個幫你提升技巧的收藏集。我會簡單基于的簡潔視頻播放器組件前端掘金使用和實現(xiàn)購物車場景前端掘金本文是上篇文章的序章,一直想有機會再次實踐下。 2道面試題:輸入URL按回車&HTTP2 - 掘金通過幾輪面試,我發(fā)現(xiàn)真正那種問答的技術面,寫一堆項目真不如去刷技術文章作用大,因此刷了一段時間的博客和掘金,整理下曾經(jīng)被...
閱讀 3285·2021-11-24 09:39
閱讀 3866·2021-11-22 09:34
閱讀 4799·2021-08-11 11:17
閱讀 1060·2019-08-29 13:58
閱讀 2571·2019-08-28 18:18
閱讀 537·2019-08-26 12:24
閱讀 825·2019-08-26 12:14
閱讀 727·2019-08-26 11:58