ES6: 數(shù)組擴(kuò)展

1. find():

  • 說明:

    1. 用于返回?cái)?shù)組中, 滿足條件的第一個(gè)值;
    2. find(callback) 里面的回調(diào)函數(shù), 會對數(shù)組進(jìn)行遍歷;
    • 回調(diào)函數(shù)中具有兩個(gè)參數(shù):
      參數(shù)1: item: 數(shù)組元素
      參數(shù)2: index: 索引值
  • 示例:

      let arr = [1, 2, 3, 4, 5, 6];
      let result = arr.find((item, index) => {
          return item > 4;
      })
      console.log(result);  // => 5 返回滿足條件的第一個(gè)值
    

2. findIndex():

  • 說明:

    1. 返回?cái)?shù)組中, 找到的滿足要求的第一個(gè)值的索引值;
    2. findIndex() 的用法與 find() 相同;
  • 示例:

      let resultIndex = arr,findIndex((item, index) => {
          return item > 4;
      }) 
      console.log(resultIndex);  // => 4 返回滿足條件的第一個(gè)值的索引
    

3. includes():

  • 說明:

    1. 用于判斷一個(gè)值是否存在于一個(gè)數(shù)組當(dāng)中;
    2. 如果數(shù)組中存在該值, 返回true, 否則返回false;
  • 示例:

    let arr = [1, 3, 5, 7];
    console.log(arr.includes(5));  // => true arr中存在5
    console.log(arr.includes(8));  // => false arr中不存在8
    

4. Array.from():

  • 說明: 是將一個(gè) 類數(shù)組對象 或者 Iterator對象 轉(zhuǎn)換成一個(gè)真正的數(shù)組;

    • 什么是類數(shù)組對象:
      • 最基本的要求就是: 具有 length 屬性的對象 ;
    • Iterator對象:
      • Set, Map, Array;
  • 示例:

    1. new Set() 講解中的 數(shù)組去重示例: 將Set類型對象 轉(zhuǎn)化為 數(shù)組

    2. 將類數(shù)組對象轉(zhuǎn)換為真正的數(shù)組:

     let arrLike = {
        0: '王東',
        1: 18,
        2: '男',
        'length': 3
     }
     console.log(Array.from(arrLike)); // => ["王東", 18, "男"]
    
    1. 如果上面的代碼將 length 屬性去掉, 結(jié)果會變?yōu)橐粋€(gè)長度為 0 的 空數(shù)組 ;

    2. 如果仍然保存 length 屬性, 但是對象的屬性名都不再是 數(shù)字類型;

    let obj = {
      name: '王東',
      age: 20,
      length: 2
    } 
    console.log(Array.from(obj));  // => [undefined, undefined]
    
    • 綜上: 如果要將一個(gè)類數(shù)組對象轉(zhuǎn)換為一個(gè)真正的數(shù)組, 必須要具備以下條件:
      1. 該類數(shù)組對象 必須具有 length 屬性, 用于指定數(shù)組的長度, 如果沒有, 轉(zhuǎn)換后的數(shù)組是一個(gè)空數(shù)組;
      2. 該類數(shù)組對象的 屬性名 必須是 數(shù)值類型, 后者是字符串類型的數(shù)字;
      • 說明: 類數(shù)組對象的屬性名可以加引號, 也可以不加;
  • 兼容性:

    • 在IE瀏覽器中不能識別該方法: 進(jìn)行兼容處理

       if(!Array.from) {
          Array.from = function (el) {
            return Array.apply(this, el);
          }
      }
      

5. new Set():

  • 說明: 該方法可用于數(shù)組去重;

  • 擴(kuò)展 - 去重原理: 在 ES6 中, 提供了新的數(shù)據(jù)結(jié)構(gòu) Set, Set類似于數(shù)組, 但是成員的值都是唯一的, 沒有重復(fù)的值;

    • 關(guān)于 Set 解析, 具體請看 ES6中的: Set 解析;
  • 返回值: 返回 Set 類型的數(shù)據(jù)

  • 示例:

    let arr = [1, 2, 2, 4, 5, 1, 5];
    console.log(new Set(arr)); // => Set(4) {1, 2, 4, 5}; 得到 Set 類型的數(shù)據(jù)
    /** 再使用上面的 Array.from() 將 Set 類型的數(shù)據(jù), 轉(zhuǎn)換為 數(shù)組類型即可: */ 
    console.log(Array.from(new Set(arr)));  // => [1, 2, 4, 5]
    

6. filter():

  • 說明:

    1. 數(shù)組的過濾器, 用于過來數(shù)組中滿足指定條件的元素;
    2. 方法里面的回調(diào)函數(shù)會對數(shù)組進(jìn)行遍歷;
  • 返回值: 滿足條件的元素所組成的新數(shù)組;

  • 示例:

    let arr = [1, 2, 3, 4, 5];
    arr.filter(item => item > 3); // => [4, 5]
    

7. reduce():

  • 說明:

    1. 該方法接收一個(gè)函數(shù)作為累加器, 數(shù)組的每個(gè)值(從左到右)開始縮減, 最終計(jì)算為一個(gè)值;
    2. 該函數(shù)可以作為一個(gè)高階函數(shù), 用于函數(shù)的 compose(可以百度這是啥玩意) ;
  • 注意: reduce() 對于空數(shù)組 是不會執(zhí)行 里面的回調(diào)函數(shù)的;

  • 語法:

    arr.reduce(function (total, currentValue, currentIndex, arr) {}, initialValue);
    
  • 參數(shù):

    • 參數(shù)1: 回調(diào)函數(shù)

      • 回調(diào)函數(shù)參數(shù) :
        參數(shù)1: total: 必選參數(shù), 初始值, 或者是計(jì)算結(jié)束后的返回值;
        參數(shù)2: currentValue: 必選參數(shù), 當(dāng)前元素;
        參數(shù)3: currentIndex: 可選參數(shù), 當(dāng)前元素的索引;
        參數(shù)4: arr: 可選參數(shù), 當(dāng)前元素所屬的數(shù)組對象;
    • 參數(shù)2: initialValue: 可選參數(shù), 傳遞給函數(shù)的初始值; 如果不設(shè)置, 那么參數(shù)1 就是 調(diào)用對象的第一個(gè)元素;

  • 返回值: 返回計(jì)算結(jié)果;

  • 示例:

    1. 使用reduce() 求數(shù)組項(xiàng)之和

      let arr = [3, 4, 6, 3, 7, 11, 6]; 
      let sum = arr.reduce(function(prev, cur) {
         return prev + cur;
      }, 0)
      console.log(arr);  // => 40
      /** 
         參數(shù)2位置傳入初始值: 0, 所以開始時(shí) prev為 0,
         cur的值為數(shù)組的第一項(xiàng)3, 相加之后返回值為3作為下一輪回調(diào)的prev的值
         然后在繼續(xù)與下一個(gè)數(shù)組項(xiàng)相加, 一次類推, 直至所有項(xiàng)相加, 并返回所得到的 求和
      */
      
    2. 求數(shù)組中的 最大數(shù)

      let max = arr.reduce(function (prev, cur) {
          return Math.max(prev, cur); 
      }) 
       /**  
          由于未傳入初始值, 所以再開始時(shí) prev 的值為數(shù)組第一項(xiàng): 3;
          cur的值為數(shù)組的第二項(xiàng)9, 取得兩值的最大值后, 進(jìn)入下一輪回調(diào);
       */
      
    3. 數(shù)組去重: (使用該函數(shù), 可以達(dá)到去除數(shù)組中相同的對象, 自行百度相關(guān)方法)

      let newArr = arr.reduce(function (prev, cur) {
         prev.indexOf(cur) === -1 && prev.push(cur);
         return prev;
      }, []);
      /** 
         參數(shù)2 位置 傳入了個(gè) 空數(shù)組: [], 作為 prev的初始值, 如果不傳, 則prev則為: arr的第一項(xiàng): 3 ;
         然后將 arr中的每一項(xiàng): cur 通過數(shù)組的 indexOf 判斷是否已經(jīng)存在于 prev 當(dāng)中, 如果返回 -1, 那么將改元素 push到 perv中
         ... 依次類推, 直到遍歷完 arr 中所有的元素, 得到的 prev 便是去重后的 新數(shù)組  
      */
      
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子衬廷,更是在濱河造成了極大的恐慌,老刑警劉巖十酣,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜒茄,死亡現(xiàn)場離奇詭異荣茫,居然都是意外死亡落剪,警方通過查閱死者的電腦和手機(jī)睁本,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來忠怖,“玉大人添履,你說我怎么就攤上這事∧杂郑” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵锐借,是天一觀的道長问麸。 經(jīng)常有香客問我,道長钞翔,這世上最難降的妖魔是什么严卖? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮布轿,結(jié)果婚禮上哮笆,老公的妹妹穿的比我還像新娘来颤。我一直安慰自己,他們只是感情好稠肘,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布福铅。 她就那樣靜靜地躺著,像睡著了一般项阴。 火紅的嫁衣襯著肌膚如雪滑黔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天环揽,我揣著相機(jī)與錄音略荡,去河邊找鬼。 笑死歉胶,一個(gè)胖子當(dāng)著我的面吹牛汛兜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播通今,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼粥谬,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了衡创?” 一聲冷哼從身側(cè)響起帝嗡,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎璃氢,沒想到半個(gè)月后哟玷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡一也,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年巢寡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片椰苟。...
    茶點(diǎn)故事閱讀 40,117評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡抑月,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出舆蝴,到底是詐尸還是另有隱情谦絮,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布洁仗,位于F島的核電站层皱,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏赠潦。R本人自食惡果不足惜叫胖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望她奥。 院中可真熱鬧瓮增,春花似錦怎棱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至你踩,卻和暖如春诅岩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背带膜。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工吩谦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人膝藕。 一個(gè)月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓式廷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親芭挽。 傳聞我的和親對象是個(gè)殘疾皇子滑废,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評論 2 355