<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          JavaScript的數(shù)據(jù)結(jié)構(gòu)-集合 |技術(shù)點(diǎn)評(píng)

          共 8168字,需瀏覽 17分鐘

           ·

          2021-03-11 14:06

          Github來(lái)源:力扣 (LeetCode)|刷題打卡 | 求星星 ? | 給個(gè)??關(guān)注,??點(diǎn)贊,??鼓勵(lì)一下作者

          [已開啟]任務(wù)一:刷題打卡 * 10 篇

          哪吒人生信條:如果你所學(xué)的東西 處于喜歡 才會(huì)有強(qiáng)大的動(dòng)力支撐。

          每天學(xué)習(xí)編程,讓你離夢(mèng)想更新一步,感謝不負(fù)每一份熱愛編程的程序員,不論知識(shí)點(diǎn)多么奇葩,和我一起,讓那一顆四處流蕩的心定下來(lái),一直走下去,加油,2021加油!歡迎關(guān)注加我vx:xiaoda0423,歡迎點(diǎn)贊、收藏和評(píng)論

          時(shí)間:3 月 1 日 ~ 3 月 13 日

          • 力扣 (LeetCode)-兩數(shù)之和,有效的括號(hào),兩數(shù)相加|刷題打卡-3月1日
          • 力扣 (LeetCode)-合并兩個(gè)有序鏈表,刪除排序數(shù)組中的重復(fù)項(xiàng),JavaScript筆記|刷題打卡-3月2日
          • 力扣 (LeetCode)-最大子序和,JavaScript數(shù)據(jù)結(jié)構(gòu)與算法(數(shù)組)|刷題打卡-3月3日
          • 針對(duì)CSS說一說|技術(shù)點(diǎn)評(píng)-3月4日
          • 力扣 (LeetCode)-棧,括號(hào)生成 |刷題打卡-3月5日
          • 原來(lái)也沒有那么難!Vue商城開發(fā) | 技術(shù)點(diǎn)評(píng)-3月6日
          • 力扣 (LeetCode)-加一,隊(duì)列 |刷題打卡-3月7日
          • JavaScript數(shù)據(jù)結(jié)構(gòu)之鏈表 | 技術(shù)點(diǎn)評(píng)-3月8日

          前言

          如果這篇文章有幫助到你,給個(gè)??關(guān)注,??點(diǎn)贊,??鼓勵(lì)一下作者,接收好挑戰(zhàn)了嗎?文章公眾號(hào)首發(fā),關(guān)注 程序員哆啦A夢(mèng) 第一時(shí)間獲取最新的文章

          ??筆芯??~

          數(shù)組,棧,隊(duì)列,鏈表

          集合

          集合是由一組無(wú)序且唯一的項(xiàng)組成的,(不能重復(fù)),可以理解為集合是一個(gè)既沒有重復(fù)元素,也沒有順序概念的數(shù)組。

          • 并集,交集,差集
          // 使用ES6中的Set類

          function Set() {
           let items = {};
          }
          • add(value),向集合添加一個(gè)新的項(xiàng)
          • delete(value),從集合移除一個(gè)值
          • has(value),如果值在集合中,返回true,否則返回false
          • clear(),移除集合中的所有項(xiàng)
          • size(),返回集合所包含元素的數(shù)量
          • values(),返回一個(gè)包含集合中所有值的數(shù)組

          has(value)方法

          this.has = function(value) {
           return value in items;
          };
          this.has = function(value) {
           return items.hasOwnProperty(value);
          };

          實(shí)現(xiàn)add方法:

          this.add = function(value) {
           if(!this.has(value)) {
            // 如果不存在,就把value添加到集合中
            items[value] = value;
            return true;
           }
           return false;
          };

          添加一個(gè)值的時(shí)候,把它同時(shí)作為鍵和值保存,因?yàn)檫@樣有利于查找這個(gè)值。

          實(shí)現(xiàn)remove方法:

          this.remove = function(value) {
           if(this.has(value)) {
           // 如果存在,就從集合中移除value
            delete items[value];
            return true;
           }
           return false;
          };

          使用Set類的示例代碼:

          let set = new Set();
          set.add(1);
          set.add(2);

          移除集合中的所有值:

          // clear方法
          this.clear = function() {
           items = {}
          };

          size方法

          1. 使用一個(gè)length變量,每當(dāng)使用addremove方法時(shí)控制它,像使用LinkedList類一樣
          2. 示例:
          this.size = function() {
          // 返回一個(gè)包含給定對(duì)象所有屬性的數(shù)組
           return Object.keys(items).length;
          };
          1. 示例:
          this.sizeLegacy = function() {
           let count = 0;
           for(let key in items) {
            // 遍歷items對(duì)象的所有屬性
            if(items.hasOwnProperty(key))
            // 檢查它們是否是對(duì)象自身的屬性
            // 如果是,遞增count變量的值
            ++count;
           }
           // 最后在方法結(jié)束時(shí)返回這個(gè)數(shù)字
           return count;
          };

          values方法,提取items對(duì)象的所有屬性,以數(shù)組的形式返回

          this.values = function() {
           let values = [];
           
           for(let i=0, keys = Object.keys(items); i < keys.length; i++) {
            values.push(items[keys[i]]);
           }
           return values;
          };
          this.valuesLegacy = function() {
           let values = [];
           
           for(let key in items) {
           // 遍歷items對(duì)象的所有屬性
            if(items.hasOwnProperty(key)) {
             values.push(item[key]);
            }
           }
           return values;
          };

          使用Set

          let set = new Set(0;
          set.add(1);
          console.log(set.values()); // 數(shù)組類型
          console.log(set.has(1)); // true
          console.log(set.size()); // 1
          ...

          集合操作

          給定的兩個(gè)集合

          1. 并集,返回一個(gè)包含兩個(gè)集合中所有元素的新集合
          2. 交集,返回一個(gè)包含兩個(gè)集合中共有元素的新集合
          3. 差集,返回一個(gè)包含所有存在于第一個(gè)集合且不存在于第二個(gè)集合的元素的新集合
          4. 子集,驗(yàn)證一個(gè)給定集合是否是另一集合的子集
          • 并集
          this.union = function(otherSet) {
          // 需要?jiǎng)?chuàng)建一個(gè)新的集合,代表兩個(gè)集合的并集
           let unionSet = new Set();
           // 獲取第一個(gè)集合所有的值,遍歷并全部添加到代表并集的集合中
           let values = this.values();
           
           for(let i=0; i<values.length; i++) {
            unionSet.add(values[i]);
           }
           values = otherSet.values();
           // 第二個(gè)集合做同樣的事
           for(let i=0; i<values.length; i++) {
            unionSet.add(values[i]);
           }
           return unionSet;
          }
          • 交集
          this.intersection = function(otherSet) {
          // 創(chuàng)建一個(gè)新的Set實(shí)例,這樣就能用它返回共有的元素
           let intersectionSet = new Set();
           
           let values = this.vlues();
           // 遍歷當(dāng)前Set實(shí)例所有的值
           for (let i=0; i<values.length; i++) {
            if(otherSet.has(values[i])){
             intersectionSet.add(values[i]);
            }
           }
           return intersectionSet;
          }
          • 差集

          表示A-B,x元素存在于A中,且x不存在于B中。

          this.difference = function(otherSet){
          // 得到所有同時(shí)存在于兩個(gè)集合中的值
           let differenceSet = new Set();
           
           let values = this.values();
           // 
           for(let i=0; i<values.length; i++){
           // 
            if(!otherSet.has(values[i])){
            // 會(huì)得到所有存在于集合A但不存在于B的值
             differenceSet.add(values[i]);
            }
           }
           return differenceSet
          };
          • 子集

          集合A是集合B的子集:

          this.subset = function(otherSet){ 
           if (this.size() > otherSet.size()){ 
           //需要驗(yàn)證的是當(dāng)前Set實(shí)例的大小
           return false
           // 如果當(dāng)前實(shí)例中的元素比otherSet實(shí)例更多,它就不是一個(gè)子集
           } else { 
           let values = this.values(); 
           for (let i=0; i<values.length; i++){ 
           //要遍歷集合中的所有元素
           if (!otherSet.has(values[i])){ 
           //驗(yàn)證這些元素也存在于otherSet中 
           return false
           //如果有任何元素不存在于otherSet中,就意味著它不是一個(gè)子集,返回false
           } 
           } 
           return true
           //如果所有元素都存在于otherSet中,那么就返回true
           } 
          };

          Set類

          let set = new Set(); 
          set.add(1); 
          // ES6的Set的values方法返回Iterator
          // 而不是值構(gòu)成的數(shù)組
          console.log(set.values()); // 輸出@Iterator 
          console.log(set.has(1)); // 輸出true 
          console.log(set.size); // 輸出1

          ES6 Set

          let setA = new Set(); 
          setA.add(1); 
          setA.add(2); 
          setA.add(3); 

          let setB = new Set(); 
          setB.add(2); 
          setB.add(3); 
          setB.add(4);
          • 并集
          let unionAb = new Set(); 
          //創(chuàng)建一個(gè)新的集合,用來(lái)添加兩個(gè)集合中所有的元素
          //迭代這兩個(gè)集合 
          for (let x of setA) unionAb.add(x); 

          for (let x of setB) unionAb.add(x); 
          • 交集
          // 創(chuàng)建一個(gè)輔助函數(shù)
          // 來(lái)生成包含setA和setB都有的元素的新集合
          let intersection = function(setA, setB) { 

           let intersectionSet = new Set(); 
           
           for (let x of setA) { 
           if (setB.has(x)) {  
           intersectionSet.add(x); 
           } 
           
           } 
           return intersectionSet; 
          }; 
          let intersectionAB = intersection(setA, setB);

          簡(jiǎn)單語(yǔ)法:

          intersectionAb = new Set([x for (x of setA) if (setB.has(x))]);
          • 差集
          let difference = function(setA, setB) { 

           let differenceSet = new Set(); 
           
           for (let x of setA) { 
             if (!setB.has(x)) {
              // 差集中只添加setA有而setB沒有的元素
              differenceSet.add(x); 
             } 
           } 
           
           return differenceSet; 
          }; 
          let differenceAB = difference(setA, setB);

          簡(jiǎn)單語(yǔ)法:

          differenceAB = new Set([x for (x of setA) if (!setB.has(x))]);

          總結(jié):JavaScript的數(shù)據(jù)結(jié)構(gòu)-集合

          回看筆者往期高贊文章,也許能收獲更多喔!

          • 一個(gè)合格的初級(jí)前端工程師需要掌握的模塊筆記
          • Vue.js筆試題解決業(yè)務(wù)中常見問題
          • 【初級(jí)】個(gè)人分享Vue前端開發(fā)教程筆記
          • 長(zhǎng)篇總結(jié)之JavaScript,鞏固前端基礎(chǔ)
          • 前端面試必備ES6全方位總結(jié)
          • 達(dá)達(dá)前端個(gè)人web分享92道JavaScript面試題附加回答
          • 【圖文并茂,點(diǎn)贊收藏哦!】重學(xué)鞏固你的Vuejs知識(shí)體系
          • 【思維導(dǎo)圖】前端開發(fā)-鞏固你的JavaScript知識(shí)體系
          • 14期-連肝7個(gè)晚上,總結(jié)了計(jì)算機(jī)網(wǎng)絡(luò)的知識(shí)點(diǎn)?。ü?6條)
          • 這是我的第一次JavaScript初級(jí)技巧
          • localStorage和sessionStorage本地存儲(chǔ)
          • HTML5中的拖放功能
          • 挑戰(zhàn)前端知識(shí)點(diǎn)HTTP/ECMAScript
          • 必學(xué)必會(huì)-音頻和視頻
          • 前端170面試題+答案學(xué)習(xí)整理(良心制作)
          • 前端HTML5面試官和應(yīng)試者一問一答
          • 哪吒鬧海,席卷圖文學(xué)習(xí)前端Flex布局
          • 騰訊位置服務(wù)開發(fā)應(yīng)用
          • 【進(jìn)階】面試官問我Chrome瀏覽器的渲染原理(6000字長(zhǎng)文)
          • 面試官一上來(lái)就問我Chrome底層原理和HTTP協(xié)議(萬(wàn)字長(zhǎng)文)
          • 熬夜總結(jié)了 “HTML5畫布” 的知識(shí)點(diǎn)
          • this/call/apply/bind(萬(wàn)字長(zhǎng)文)
          • HTTP/HTTPS/HTTP2/DNS/TCP/經(jīng)典題
          • 執(zhí)行上下文/作用域鏈/閉包/一等公民
          • Web頁(yè)面制作基礎(chǔ)
          • 學(xué)習(xí)總結(jié)之HTML5劍指前端(建議收藏,圖文并茂)

          ??關(guān)注+點(diǎn)贊+收藏+評(píng)論+轉(zhuǎn)發(fā)??,原創(chuàng)不易,鼓勵(lì)筆者創(chuàng)作更好的文章

          點(diǎn)贊、收藏和評(píng)論

          我是Jeskson(達(dá)達(dá)前端),感謝各位人才的:點(diǎn)贊、收藏和評(píng)論,我們下期見!(如本文內(nèi)容有地方講解有誤,歡迎指出?謝謝,一起學(xué)習(xí)了)

          我們下期見!

          文章持續(xù)更新,可以微信搜一搜「 程序員哆啦A夢(mèng) 」第一時(shí)間閱讀,回復(fù)【資料】有我準(zhǔn)備的一線大廠資料,本文 http://www.dadaqianduan.cn/#/ 已經(jīng)收錄

          github收錄,歡迎Star:https://github.com/webVueBlog/WebFamily

          瀏覽 39
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  成人做爱网站免费 | 免费啪啪啪网站 | 91人妻无码成人精品一区91 | 伊人色色网 | 人人看人人摸人人操天天看天天摸天天操 |