JavaScript陣列去重的方法
陣列去重,一般在面試的時候經常會問到的或者一般是要求手寫陣列去重方法的程式碼
一、ES5中最常用的利用for巢狀for,然後splice去重
function unique(arr){
for(var i=0; i<arr.length; i++){
for(var j=i+1; j<arr.length; j++){
//第一個等同於第二個,splice() 方法通過刪除或替換現有元素或者原地新增新的元素來修改陣列,並以陣列形式返回被修改的內容。此方法會改變原陣列
if(arr[i]==arr[j]){
arr.splice(j,1);
j--;
}
}
}
return arr;
}
var arr = [1,2,3,4,5,6,2,4,6,8];
console.log(unique(arr))
複製程式碼
二、利用ES6 Set去重(Set是ES6的方法)
function unique (arr) {
return Array.from(new Set(arr))
}
var arr = [1,2,3,4,5,6,2,4,6,8];
console.log(unique(arr))
複製程式碼
不考慮相容性的話,這種去重的方法程式碼是最少的,ECMAScript 6 入門
三、利用indexOf去重
var arr = [1,3,4,5,6,7,4,3,2,4,5,6,7,3,2];
function unique(){
var newArr = [];
for (var i = 0; i < arr.length; i++) {
if (newArr.indexOf(arr[i]) == -1 ) {
newArr.push(arr[i]);
}
}
console.log(newArr);
}
unique(arr);
複製程式碼
indexOf()方法如果檢索的結果沒有匹配值,則返回 -1.
四、利用sort()
var arr = [1,3,4,5,6,7,4,3,2,4,5,6,7,3,2];
function unique2(arr){
arr.sort();
var newArr = [arr[0]],
len = arr.length;
for(var i = 1; i < len; i++){
if(arr[i] !== newArr[newArr.length - 1] ){
newArr.push(arr[i]);
}
}
return newArr;
}
console.log( unique2(arr) );
複製程式碼
五、利用物件的屬性去重
每次取出原陣列的元素,然後再物件中訪問這個屬性,如果存在就說明重複
function unique(arr){
var res =[];
var json = {};
for(var i=0;i<arr.length;i++){
if(!json[arr[i]]){
res.push(arr[i]);
json[arr[i]] = 1;
}
}
return res;
}
var arr = [1,3,4,5,6,7,4,3,2,4,5,6,7,3,2];
console.log(unique(arr))
複製程式碼
六、利用陣列原型物件上的includes方法
function unique(arr){
var res = [];
for(var i=0; i<arr.length; i++){
if( !res.includes(arr[i]) ){ // 如果res新陣列包含當前迴圈item
res.push(arr[i]);
}
}
return res;
}
console.log(unique([1,1,2,3,4,5,3,2,3,6,7,4]));
複製程式碼