無論是在面試還是在項目開發中,數組去重是經常碰到的問題 。今天老K為大家總結一下幾種好用的數組去重的方法 。ES5的方法:
一、利用兩次for循環,然后splice去重(ES5中最常用)
function unique(arr){ if(toString.call(arr) !== "[object Array]"){ console.log(\\\'必須為數組\\\'); return ; } for(var i=0; i原理:雙層循環,外層循環元素,內層循環時比較值 。值相同時,則刪去這個值 。
優點:兼容強 。
缺點:不能去重NaN,object對象,數據量大時,效率不高 。
二、利用數組的排序方法sort去重
function unique(arr){ if (toString.call(arr) !== "[object Array]"){ console.log(\\\'必須為數組\\\'); return; } arr = arr.sort() var new_array = [arr[0]]; for(var i =1; i原理:利用sort()排序方法,然后根據排序后的結果進行遍歷及相鄰元素比對 。
優點:兼容強,邏輯簡單,容易理解 。
缺點:不能去重NaN,object對象 。
三、利用對象的屬性不能相同的特點進行去重,主要用hasOwnProperty
function unique(arr){ if (toString.call(arr) !== "[object Array]"){ console.log(\\\'必須為數組\\\'); return; } var obj = {}; var new_arr = []; for(var i = 0; i< arr.length; i){ if(!obj.hasOwnProperty(typeof arr[i] arr[i])){ new_arr.push(arr[i]); obj[typeof arr[i] arr[i]] = true; } } return new_arr}var arr = [2,2,\\\'a\\\',\\\'a\\\',true,true,\\\'true\\\',\\\'true\\\',false,false,\\\'false\\\',\\\'false\\\',undefined,undefined,null,null,NaN,NaN,\\\'NaN\\\',0,0,{},{}];unique(arr); //[2, "a", true, "true", false, "false", undefined, null, NaN, "NaN", 0, {…}] 原理:新建個空對象,空數組,遍歷目標數組 。如果元素不是對象的鍵,將元素加到新數組里,同時給鍵賦值 。如果已是對象的鍵,則忽略 。利用typeof 區分布爾值和”true”、“false“,NaN和“NaN“ 。
優點:可以將各種類型的數據去重 。
缺點:暫無 。
ES6的方法:
一、 利用 ES6的Set對象的特性去重
function unique(arr){ if(!Array.isArray(arr)){ console.log(\\\'必須為數組\\\'); return; } return Array.from(new Set(arr)) //或者用擴展運算符轉化為數組 return [...new Set(arr)]};var arr = [2,2,\\\'a\\\',\\\'a\\\',true,true,\\\'true\\\',\\\'true\\\',false,false,\\\'false\\\',\\\'false\\\',undefined,undefined,null,null,NaN,NaN,\\\'NaN\\\',0,0,{},{}];unique(arr); // [2, "a", true, "true", false, "false", undefined, null, NaN, "NaN", 0, {...},{...}] 原理:利用ES6的Set對象自動排除重復項的特性,通過ES6的Array的from方法或者擴展運算符將Set對象轉化為數組 。
優點:不考慮兼容性,這種方法代碼最少 。
缺點:這種方法無法去重object對象,需要考慮兼容問題 。
二、利用ES6的數組方法indexOf去重
function unique(arr){ if(!Array.isArray(arr)){ console.log(\\\'必須為數組\\\'); return; } var new_array = []; for(var i = 0; i
猜你喜歡
- php怎么把數組合成字符串 php數組拼接成字符串
- 最實用的2種方法 php數組轉字符串函數有哪些
- 西瓜的保存方法最簡單 西瓜怎么保存
- 油條怎么炸 最簡單的炸油條方法
- 荸薺最簡單的吃法是 一看就學會了
- 君子蘭葉片不會能剪去重生嗎
- 部落沖突13本打法 最簡單的部落沖突13本打法
- 除鞋臭的辦法有哪些
- 最簡單的混凝土怎么做 制作混凝土的方法
- 海南木瓜最簡單的食用方法 海南木瓜怎么吃
