Javascript數組去重的幾種方法
阿新 • • 發佈:2018-05-09
lar ID 數組元素 去重 變化 urn es6 復制 [1]
Javascript數組去重的幾種方法
新建空數組,通過for...of(ES6)循環遍歷,通過indexOf判斷元素是否在新數組中存在,將不存在的(indexOf(n)==-1)元素push到新數組中:
let arr = [1,1,2,2,3,6,3,77,88,5,98,9,7,2,7,5,3,4,2]; function removeDup_indexOf(originalArr){ let newArr = []; for(n of originalArr){ if(newArr.indexOf(n)==-1){ newArr.push(n); } } return newArr; } let arr1 = removeDup_indexOf(arr);
也可首先將原始數組的第一項放到新數組中,從第二項開始循環判斷:
let arr = [1,1,2,2,3,6,3,77,88,5,98,9,7,2,7,5,3,4,2]; function removeDup_index(originalArr){ //index=0的項先加到數組裏,之後從第二項開始循環 let newArr = [originalArr[0]]; for(var i=1;i<originalArr.length;i++){ if(originalArr.indexOf(originalArr[i])==i){ newArr.push(originalArr[i]); } } return newArr; } let arr2 = removeDup_index(arr);
利用相鄰數組的比較,將與前一個元素不同的元素push到數組中,註意:這種方式要首先將數組進行排序,用slice()方法深拷貝原始數組進行排序,避免對原數組造成影響。
let arr = [1,1,2,2,3,6,3,77,88,5,98,9,7,2,7,5,3,4,2]; function compareAdjoin(originalArr){ let orderedArr = originalArr.slice().sort();//先進行排序,然後相鄰的數組元素進行比較 let newArr = [orderedArr[0]]; for(var i=1;i<orderedArr.length;i++){ if(orderedArr[i]!=orderedArr[i-1]){ newArr.push(orderedArr[i]); } } return newArr; } let arr3 = compareAdjoin(arr);
利用object{key:value}, key值不能重復的特性。創建一個新的obj{ },將數組的每個元素作為key添加到obj中,並將obj[arr[i]]不存在的元素push到新數組中 ,
obj= { arr[1]: value,arr[2]:value...}
註意:無需關註value的值,可任意復制,僅是通過key判斷元素是否已添加過。let arr = [1,1,2,2,3,6,3,77,88,5,98,9,7,2,7,5,3,4,2]; function removeDup_obj(originalArr){ let newArr=[]; let obj={}; for(n of originalArr){ if(!obj[n]){ obj[n] = 1; newArr.push(n); } } return newArr; } let arr4 = removeDup_obj(arr);
倒敘循環(避免刪除過程中數組長度變化影響遍歷)排序過的數組,將與後一項相同的元素通過splice方法從原數組中刪除,同#2,首先將數組進行排序,用slice()方法深拷貝原始數組進行排序,避免對原數組造成影響。
let arr = [1,1,2,2,3,6,3,77,88,5,98,9,7,2,7,5,3,4,2]; function removeDup_splice(originalArr){ let orderedArr = originalArr.slice().sort(); for(var i = orderedArr.length-1;i>0;i--){ if(orderedArr[i-1]===orderedArr[i]){ orderedArr.splice([i-1],1); } } return orderedArr; } let arr5 = removeDup_splice(arr);
Javascript數組去重的幾種方法