国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

來一個老生常談的話題,JavaScript中,數組如何去重?

開發 前端
關于如何去除一個給定數組中的重復項,應該是 Javascript 面試中最常見的一個問題了,最常見的方式有三種:Set、Array.prototype.filter 以及 Array.prototype.reduce,對于只有簡單數據的數組來講,我最喜歡 Set,沒別的,就是寫起來簡單。

[[274623]]

 關于如何去除一個給定數組中的重復項,應該是 Javascript 面試中最常見的一個問題了,最常見的方式有三種:Set、Array.prototype.filter 以及 Array.prototype.reduce,對于只有簡單數據的數組來講,我最喜歡 Set,沒別的,就是寫起來簡單。

  1. const originalArray = [1, 2, '咩', 1, 'Super Ball''咩''咩''Super Ball', 4] 
  2. const bySet = [...new Set(originalArray)] 
  3. const byFilter = originalArray.filter((item, index) => originalArray.indexOf(item) === index 
  4. const byReduce = originalArray.reduce((unique, item) => unique.includes(item) ? unique : [...unique, item], []) 

使用 Set

先讓我們來看看 Set 到底是個啥

  1. Set 對象允許你存儲任何類型的唯一值,無論是原始值或者是對象引用。 
  2. <cite>https://developer.mozilla.org...</cite> 
  • 首先,Set 中只允許出現唯一值
  • 唯一性是比對原始值或者對象引用

const bySet = [...new Set(originalArray)] 這一段的操作,我們將它拆分來看:

  1. const originalArray = [1, 2, '咩', 1, 'Super Ball''咩''咩''Super Ball', 4]  
  2. const uniqueSet = new Set(originalArray) 
  3. // 得到 Set(5) [ 1, 2, "咩""Super Ball", 4 ] 
  4. const bySet = [...uniqueSet] 
  5. // 得到 Array(5) [ 1, 2, "咩""Super Ball", 4 ] 

在將 Set 轉為 Array 時,也可以使用 Array.from(set)。

使用 Array.prototype.filter

要理解 filter 方法為什么可以去重,需要關注一下另一個方法 indexOf

  1. indexOf()方法返回在數組中可以找到一個給定元素的第一個索引,如果不存在,則返回 -1。 
  2. <cite>https://developer.mozilla.org...</cite> 
  1. const beasts = ['ant''bison''camel''duck''bison']; 
  2. console.log(beasts.indexOf('bison')); 
  3. // expected output: 1 
  4. // start from index 2 
  5. console.log(beasts.indexOf('bison', 2)); 
  6. // expected output: 4 
  7. console.log(beasts.indexOf('giraffe')); 
  8. // expected output: -1 
  1. filter() 方法創建一個新數組, 其包含通過所提供函數實現的測試的所有元素。 
  2. <cite>https://developer.mozilla.org...</cite> 

filter 方法接受兩個參數:

  • 第一個參數:一個回調函數, filter 會將數據中的每一項都傳遞給該函數,若該函數返回 真值,則數據保存,返回 假值,則數據將不會出現在新生成的數據中
  • 第二個參數:回調函數中 this 的指向

我們將上面的去重方法按下面這樣重寫一下,就可以看清整個 filter 的執行過程了。

  1. const originalArray = [1, 2, '咩', 1, 'Super Ball''咩''咩''Super Ball', 4] 
  2. const table = [] 
  3. const byFilter = originalArray.filter((item, index) => { 
  4.   // 如果找到的索引與當前索引一致,則保留該值 
  5.   const shouldKeep = originalArray.indexOf(item) === index 
  6.   table.push({ 
  7.     序號: index
  8.     值: item, 
  9.     是否應該保留: shouldKeep ? '保留' : '刪除' 
  10.   }) 
  11.   return shouldKeep 
  12. })  
  13. console.log(byFilter) 
  14. console.table(table

使用 Array.prototype.reduce

  1. reduce() 方法對數組中的每個元素執行一個由您提供的 reducer 函數(升序執行),將其結果匯總為單個返回值。 
  2. <cite>https://developer.mozilla.org...</cite> 

Array.prototype.reduce 方法接受兩個參數:

  • Callback:回調函數,它可以接收四個參數
  1. Accumulator:累計器,這個其實是讓很多人忽略的一點,就是,累計器其實可以是任何類型的數據
  2. Current Value:當前值
  3. Current Index:當前值的索引
  4. Source Array:源數組
  • Initial Value:累計器的初始值,就跟累計器一樣,這個參數也總是被絕大多數人忽略

就像 filter 章節一樣,我們來看看 reduce 的執行過程:

  1. const originalArray = [1, 2, '咩', 1, 'Super Ball''咩''咩''Super Ball', 4] 
  2. const byReduce = originalArray.reduce((unique, item, index, source) => { 
  3.   const exist = unique.includes(item) 
  4.   const next = unique.includes(item) ? unique : [...unique, item] 
  5.   console.group(`遍歷第 ${index} 個值`) 
  6.   console.log('當前累計器:'unique
  7.   console.log('當前值:', item) 
  8.   console.log('是否已添加進累計器?', exist) 
  9.   console.log('新值'next
  10.   console.groupEnd() 
  11.   return next 
  12. }, []) 

 

責任編輯:華軒 來源: segmentfault
相關推薦

2015-07-21 13:39:58

Javascript作用域

2015-06-25 10:46:23

數據中心節能

2015-04-08 11:50:07

數據加密數據泄露

2014-07-25 13:34:08

2010-07-28 09:09:55

SQL

2022-03-08 15:01:48

負載均衡IP服務器

2012-02-13 09:46:56

數據中心耗能服務器虛擬化

2014-08-21 10:25:44

網絡安全兒童賬戶Google

2011-08-18 14:47:06

2020-01-14 10:37:38

存儲DateTime數值

2021-04-12 09:36:25

Redis擊穿穿透

2021-04-12 09:58:46

Redis數據庫代碼

2017-04-11 13:54:49

HTTPURLHTML

2022-07-28 00:25:22

5G4G速度

2022-05-06 12:01:01

優化小程序

2021-11-26 05:57:12

開源備份Restic

2010-03-29 09:04:51

VB.NET

2024-01-02 09:42:17

C#開發Windows消息循環機制

2010-01-28 13:55:45

三層交換機

2020-11-18 07:52:57

技巧
點贊
收藏

51CTO技術棧公眾號

国产精品日韩一区二区三区| xxxxx国产| 欧洲亚洲精品| 欧洲一区在线电影| 九热视频在线观看| 免费永久网站黄欧美| 欧美精品电影免费在线观看| 欧美人与动牲性行为| 综合久久一区二区三区| 成人性做爰片免费视频| 欧美黄色免费| 亚洲欧美日韩精品久久亚洲区| 最近中文字幕在线中文视频| 97久久精品人人爽人人爽蜜臀| 91免费看网站| 久久久伦理片| 中文综合在线观看| 黄网站在线免费| 日韩欧美国产黄色| 福利视频网站| 久久婷婷一区二区三区| 99热这里只有精品7| 亚洲黄页一区| 91精品久久久久| 视频精品一区| 日韩视频免费中文字幕| 国产不卡人人| 欧美一级二级三级蜜桃| 北条麻妃在线| 在线观看日韩毛片| 国产成人精品福利一区二区三区 | 麻豆国产在线播放| 疯狂做受xxxx欧美肥白少妇| 亚州av电影免费在线观看| 色一区在线观看| av在线女优影院| 日韩一本二本av| 成人看片网站| 97视频com| 亚洲香蕉av| 久久这里精品国产99丫e6| 蜜臀久久久99精品久久久久久| 日韩一二区视频| 中文字幕精品在线不卡| 欧美性猛交p30| 国产精品vip| 91精品国产91久久久久青草| 日韩一区二区在线免费| 国产精品制服诱惑| 亚洲人体大胆视频| 日本黄色a视频| 久久综合精品国产一区二区三区| 大陆极品少妇内射aaaaa| 亚洲欧美另类久久久精品| 福利成人在线观看| 亚洲天堂网在线观看| 911亚洲精品| 国产精品xxxx| 成人精品视频一区二区三区| 黄色网址三级| 日韩欧美自拍偷拍| 欧美视频免费看| 国产日韩精品电影| 久久66热偷产精品| 被下部羞羞漫画| 日韩欧美一级片| xvideos.蜜桃一区二区| 国产伦精品一区二区三区免| 成人性生交大片| 最色在线观看| 欧美r级在线观看| 亚洲va欧美va人人爽成人影院| 91在线|亚洲| 国产1区2区3区精品美女| 伊人发布在线| 亚洲偷欧美偷国内偷| 成人在线免费观看网站| 亚洲综合激情五月| 亚洲国产精品人人做人人爽| 欧美一区 二区 三区| 2014亚洲精品| 国产精品无遮挡| а√天堂8资源在线| 国产精品福利在线观看| 国产美女在线观看一区| 污香蕉视频在线观看| 久久久精品网站| 日韩电影在线一区| 香蕉网站在线| 91国产美女在线观看| 国产精品资源站在线| 中文日本在线观看| 26uuu亚洲国产精品| 国产精品系列在线观看| 成人午夜影视| 国产精品海角社区在线观看| 91视频xxxx| 日韩精品亚洲人成在线观看| 91久久久久久久久| 亚洲欧洲三级电影| 成人乱码手机视频| 亚洲三区四区| 欧美性猛交一区二区三区精品| 欧美黑白配在线| 性欧美大战久久久久久久| 精品久久久久久综合日本欧美| 婷婷久久国产对白刺激五月99| 中文字幕视频在线免费观看| 欧美精品一区在线观看| 亚洲欧美综合国产精品一区| mm131国产精品| 亚洲欧美日韩天堂| 老牛国产精品一区的观看方式| 夜夜嗨aⅴ免费视频| 91精品国产色综合| 国产欧美精品一区二区三区四区 | 欧美午夜精品电影| sdde在线播放一区二区| 别急慢慢来1978如如2| 亚洲色图15p| 青青草国产成人av片免费| 成年人在线观看网站| 亚洲va欧美va在线观看| 成人免费在线观看入口| 91精品啪在线观看国产爱臀| 男女超爽视频免费播放| 在线看日韩av| www.欧美.com| 欧美片第一页| 欧美中文字幕在线观看视频| 精品偷拍各种wc美女嘘嘘| 看电视剧不卡顿的网站| 黄色aa久久| 久久久天堂国产精品| 一区二区三区在线播放欧美| 国产成人免费av在线| av一区在线播放| 91国视频在线| 精品国产欧美一区二区五十路| 91视频在线观看免费| jizzjizzjizz欧美| 久久99爱视频| 国产精品一区久久| 色香蕉成人二区免费| 99久久精品网站| 2019中文字幕在线视频| 欧美一区二视频在线免费观看| 欧美精品一区男女天堂| 国产成人啪午夜精品网站男同| 欧美三级电影网址| 亚欧美在线观看| 国产精品av免费在线观看| 亚洲国产日韩一级| 亚洲福利国产| 伊人久久精品一区二区三区| 欧美日韩在线一| 91爱视频在线| 一本色道久久综合亚洲精品按摩| 国产亚洲精品bv在线观看| 国产精品一区二区日韩| 欧美人成在线观看| 欧美怡春院一区二区三区| 欧美性xxxx极品hd满灌| 日本不卡在线视频| 成人综合日日夜夜| 天海翼一区二区三区四区在线观看 | 加勒比一区二区三区| 国产一区二区色| 欧美xxxxxxxxx| 91免费在线播放| japanese国产精品| 在线网址91| 国产午夜福利视频在线观看| 国产精品久久久久久久7电影 | 亚洲一级在线| yiren22亚洲综合| 午夜神马福利影院| 久久99精品国产99久久| 中文字幕欧美在线| 亚洲香蕉伊在人在线观| 日韩激情在线观看| 久久三级中文| 99精品老司机免费视频| 久久视频这里有精品| 成人久久一区二区三区| 亚洲韩国日本中文字幕| 伊人成综合网站| 国产视频在线看| 捆绑紧缚一区二区三区在线观看| 你懂的国产精品永久在线| wwww亚洲| 精品国产乱码久久久久久闺蜜| 美女脱光内衣内裤视频久久影院| 国产精品久久免费视频 | 97久久国产精品| 欧美一区二区三区视频| 亚洲视频一区在线观看| 久久成人久久鬼色| 99热国内精品| 免费精品一区二区三区在线观看|