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