亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

JavaScript數組去重的方法總結【12種方法,號稱史上最全】

2019-11-19 12:03:42
字體:
來源:轉載
供稿:網友

本文實例總結了JavaScript數組去重的方法。分享給大家供大家參考,具體如下:

數組去重,一般都是在面試的時候才會碰到,一般是要求手寫數組去重方法的代碼。如果是被提問到,數組去重的方法有哪些?你能答出其中的10種,面試官很有可能對你刮目相看。

在真實的項目中碰到的數組去重,一般都是后臺去處理,很少讓前端處理數組去重。雖然日常項目用到的概率比較低,但還是需要了解一下,以防面試的時候可能回被問到。

注:寫的匆忙,加上這幾天有點忙,還沒有非常認真核對過,不過思路是沒有問題,可能一些小細節出錯而已。

數組去重的方法

一、利用ES6 Set去重(ES6中最常用)

function unique (arr) { return Array.from(new Set(arr))}var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];console.log(unique(arr)) //[1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {}, {}]

不考慮兼容性,這種去重的方法代碼最少。這種方法還無法去掉“{}”空對象,后面的高階方法會添加去掉重復“{}”的方法。

二、利用for嵌套for,然后splice去重(ES5中最常用)

function unique(arr){    for(var i=0; i<arr.length; i++){      for(var j=i+1; j<arr.length; j++){        if(arr[i]==arr[j]){     //第一個等同于第二個,splice方法刪除第二個          arr.splice(j,1);          j--;        }      }    }return arr;}var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];console.log(unique(arr))//[1, "true", 15, false, undefined, NaN, NaN, "NaN", "a", {…}, {…}]   //NaN和{}沒有去重,兩個null直接消失了

雙層循環,外層循環元素,內層循環時比較值。值相同時,則刪去這個值。

想快速學習更多常用的ES6語法,可以看我之前的文章《學習ES6筆記──工作中常用到的ES6語法》。

三、利用indexOf去重

function unique(arr) {  if (!Array.isArray(arr)) {    console.log('type error!')    return  }  var array = [];  for (var i = 0; i < arr.length; i++) {    if (array .indexOf(arr[i]) === -1) {      array .push(arr[i])    }  }  return array;}var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];console.log(unique(arr))// [1, "true", true, 15, false, undefined, null, NaN, NaN, "NaN", 0, "a", {…}, {…}] //NaN、{}沒有去重

新建一個空的結果數組,for 循環原數組,判斷結果數組是否存在當前元素,如果有相同的值則跳過,不相同則push進數組。

四、利用sort()

function unique(arr) {  if (!Array.isArray(arr)) {    console.log('type error!')    return;  }  arr = arr.sort()  var arrry= [arr[0]];  for (var i = 1; i < arr.length; i++) {    if (arr[i] !== arr[i-1]) {      arrry.push(arr[i]);    }  }  return arrry;}var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];console.log(unique(arr))// [0, 1, 15, "NaN", NaN, NaN, {…}, {…}, "a", false, null, true, "true", undefined]   //NaN、{}沒有去重

利用sort()排序方法,然后根據排序后的結果進行遍歷及相鄰元素比對。

五、利用對象的屬性不能相同的特點進行去重(這種數組去重的方法有問題,不建議用,有待改進)

function unique(arr) {  if (!Array.isArray(arr)) {    console.log('type error!')    return  }  var arrry= [];   var obj = {};  for (var i = 0; i < arr.length; i++) {    if (!obj[arr[i]]) {      arrry.push(arr[i])      obj[arr[i]] = 1    } else {      obj[arr[i]]++    }  }  return arrry;}var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];console.log(unique(arr))//[1, "true", 15, false, undefined, null, NaN, 0, "a", {…}]  //兩個true直接去掉了,NaN和{}去重

六、利用includes

function unique(arr) {  if (!Array.isArray(arr)) {    console.log('type error!')    return  }  var array =[];  for(var i = 0; i < arr.length; i++) {      if( !array.includes( arr[i]) ) {//includes 檢測數組是否有某個值          array.push(arr[i]);       }  }  return array}var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];console.log(unique(arr))//[1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {…}, {…}]   //{}沒有去重

七、利用hasOwnProperty

function unique(arr) {  var obj = {};  return arr.filter(function(item, index, arr){    return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true)  })}var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];console.log(unique(arr))//[1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {…}]  //所有的都去重了

利用hasOwnProperty 判斷是否存在對象屬性

八、利用filter

function unique(arr) { return arr.filter(function(item, index, arr) {  //當前元素,在原始數組中的第一個索引==當前索引值,否則返回當前元素  return arr.indexOf(item, 0) === index; });}var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];console.log(unique(arr))//[1, "true", true, 15, false, undefined, null, "NaN", 0, "a", {…}, {…}]

九、利用遞歸去重

function unique(arr) {    var array= arr;    var len = array.length;  array.sort(function(a,b){  //排序后更加方便去重    return a - b;  })  function loop(index){    if(index >= 1){      if(array[index] === array[index-1]){        array.splice(index,1);      }      loop(index - 1);  //遞歸loop,然后數組去重    }  }  loop(len-1);  return array;}var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];console.log(unique(arr))//[1, "a", "true", true, 15, false, 1, {…}, null, NaN, NaN, "NaN", 0, "a", {…}, undefined]

十、利用Map數據結構去重

function arrayNonRepeatfy(arr) { let map = new Map(); let array = new Array(); // 數組用于返回結果 for (let i = 0; i < arr.length; i++) {  if(map .has(arr[i])) { // 如果有該key值   map .set(arr[i], true);  } else {   map .set(arr[i], false);  // 如果沒有該key值   array .push(arr[i]);  } } return array ;}var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];console.log(unique(arr))//[1, "a", "true", true, 15, false, 1, {…}, null, NaN, NaN, "NaN", 0, "a", {…}, undefined]

創建一個空Map數據結構,遍歷需要去重的數組,把數組的每一個元素作為key存到Map中。由于Map中不會出現相同的key值,所以最終得到的就是去重后的結果。

十一、利用reduce+includes

function unique(arr){  return arr.reduce((prev,cur) => prev.includes(cur) ? prev : [...prev,cur],[]);}var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];console.log(unique(arr));// [1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {…}, {…}]

十二、[...new Set(arr)]

[...new Set(arr)]//代碼就是這么少----(其實,嚴格來說并不算是一種,相對于第一種方法來說只是簡化了代碼)

PS:有些文章提到了foreach+indexOf數組去重的方法,個人覺得都是大同小異,所以沒有寫上去。

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具http://tools.VeVB.COm/code/HtmlJsRun測試上述代碼運行效果。

PS:這里再為大家提供幾款相關工具供大家參考使用:

在線去除重復項工具:
http://tools.VeVB.COm/code/quchong

在線文本去重復工具:
http://tools.VeVB.COm/aideddesign/txt_quchong

更多關于JavaScript相關內容還可查看本站專題:《JavaScript數組操作技巧總結》、《JavaScript字符與字符串操作技巧總結》、《JavaScript遍歷算法與技巧總結》、《JavaScript查找算法技巧總結》、《JavaScript數學運算用法總結》、《JavaScript數據結構與算法技巧總結》及《JavaScript錯誤與調試技巧總結

希望本文所述對大家JavaScript程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美午夜www高清视频| 欧美国产欧美亚洲国产日韩mv天天看完整| 日韩成人在线电影网| 午夜精品福利电影| 26uuu亚洲伊人春色| 夜夜嗨av一区二区三区四区| 国产日韩欧美成人| 国产精品福利小视频| 日韩av在线网址| 国产精品www色诱视频| 国产网站欧美日韩免费精品在线观看| 国产精品一区二区久久国产| 国产精品免费久久久久久| 亚洲成人在线视频播放| 欧美成人合集magnet| 久久久久久12| 欧美做受高潮电影o| 国产日韩精品综合网站| 久久精品国产亚洲精品2020| 欧美一区三区三区高中清蜜桃| 亚洲第一天堂无码专区| 日韩国产高清视频在线| 欧美另类99xxxxx| 久操成人在线视频| 国产免费久久av| 精品视频偷偷看在线观看| 欧美性猛交xxxx乱大交极品| 国产成人涩涩涩视频在线观看| www.欧美三级电影.com| 亚洲国产古装精品网站| 三级精品视频久久久久| 久久久久久久久久av| 亚洲欧美日韩图片| 亚洲综合小说区| 国产精品入口夜色视频大尺度| 国产精品色婷婷视频| 青草青草久热精品视频在线观看| 久久久久国产精品免费网站| 在线播放国产一区二区三区| 91久久精品美女高潮| 欧美日韩第一页| 亚洲欧美国产日韩中文字幕| 日韩视频欧美视频| 久99九色视频在线观看| 国产精品美女久久久久av超清| 精品国偷自产在线视频99| 欧美日韩美女在线观看| 日韩欧美在线字幕| 亚洲最新av网址| 中文在线资源观看视频网站免费不卡| 亚洲欧美国产制服动漫| 欧美激情videos| 亚洲精品一区中文字幕乱码| 伊人久久久久久久久久久久久| 久久久久999| 欧美午夜精品久久久久久久| 久久久久久一区二区三区| 亚洲欧美在线免费| www.久久久久久.com| 欧美成人全部免费| 国产成人综合亚洲| 97热在线精品视频在线观看| 在线日韩欧美视频| 7777免费精品视频| 亚洲国产精品字幕| 精品视频在线播放| 国产一区二区香蕉| 亚洲国产日韩欧美综合久久| 色偷偷噜噜噜亚洲男人| 51精品国产黑色丝袜高跟鞋| 97在线看免费观看视频在线观看| 亚洲一区av在线播放| 久久久久久久一区二区| 欧美精品第一页在线播放| 欧美怡红院视频一区二区三区| 日韩大陆欧美高清视频区| 欧美一级高清免费播放| 日韩视频免费看| 久99九色视频在线观看| 国产午夜精品麻豆| 亚洲精品国偷自产在线99热| 国产精品海角社区在线观看| 影音先锋日韩有码| 欧美成人一区二区三区电影| 亚洲国产一区二区三区四区| 92福利视频午夜1000合集在线观看| 国产精品白嫩初高中害羞小美女| 国产日韩精品一区二区| 国产日本欧美在线观看| 亚洲综合最新在线| 欧美裸身视频免费观看| 亚洲网在线观看| 91精品一区二区| 亚洲va国产va天堂va久久| 亚洲成人av资源网| 亚洲一品av免费观看| 亚洲福利在线观看| 色爱精品视频一区| 中文精品99久久国产香蕉| 日韩在线不卡视频| 国产噜噜噜噜久久久久久久久| 国语自产精品视频在线看一大j8| 亚洲国产成人在线视频| 综合136福利视频在线| 日本伊人精品一区二区三区介绍| 国产欧美一区二区三区视频| 国产一区二区三区精品久久久| 国产精品女人久久久久久| 国产精品一区久久久| 91福利视频在线观看| 国产91精品不卡视频| 亚洲欧美变态国产另类| 国产在线久久久| 中文字幕亚洲无线码在线一区| 欧美第一淫aaasss性| 久久人人爽人人爽爽久久| 中文字幕欧美日韩精品| 午夜精品久久久久久久久久久久| 伊人久久久久久久久久久| 成人乱色短篇合集| 国产精品99免视看9| 亚洲第一av网| 亚洲精品福利资源站| 亚洲激情视频在线| 日本中文字幕不卡免费| 国产精品美女无圣光视频| 国产日韩欧美视频| 97在线观看免费| 日韩亚洲一区二区| 911国产网站尤物在线观看| 韩国精品美女www爽爽爽视频| 久久久av免费| 国产中文日韩欧美| 日韩中文在线视频| 97国产精品久久| www.久久撸.com| 欧美大片免费观看在线观看网站推荐| 不卡伊人av在线播放| 亚洲一二在线观看| 久久在线精品视频| 国产一区欧美二区三区| 精品国产电影一区| 日韩在线视频线视频免费网站| 国产成人av在线| 91网在线免费观看| 欧美激情精品久久久久久黑人| 久久久免费精品| 国内成人精品一区| 欧美成人免费全部| 久久99青青精品免费观看| 国模gogo一区二区大胆私拍| 日本一区二区在线免费播放| 欧美激情视频在线免费观看 欧美视频免费一| 91精品在线播放| 国产精品av在线播放| 国产精品久久久久999| 69影院欧美专区视频| 岛国视频午夜一区免费在线观看| 久久天天躁狠狠躁夜夜av| 国产99久久精品一区二区| 岛国av午夜精品| 国产精品视频播放| 国产欧美一区二区三区视频| 国产精品夜色7777狼人|