今天整理了一下數組去重的幾種方法:
數組去重
方法一:使用雙層for循環
var arr=[2,2,2,2,3,4,6,12,6,3,12,1,2,3,2,6];
var newArr=[arr[0]];//存放原數組的第一個元素
for(var i=1;i<arr.length;i++){//從第二個元素遍歷
var flag=true;
for(var j=0;j<newArr.length;j++){//遍歷新數組中的元素
if(arr[i]==newArr[j]){
flag=false;
break;
}
}
if(flag){
newArr.push(arr[i]);
}
}
console.log(newArr);
方法二:先排序後去重
我們可以先對數組進行排序,然後比較相鄰兩個元素,如果兩個元素不相同,就塞到新數組中;
function unique(arr){
var newArr=[];
arr.sort(function(a,b){
return a-b;
})
for(var i=0;i<arr.length;i++){
if(arr[i]!=arr[i+1]){
newArr.push(arr[i]);
}
}
return newArr;
}
方法三:使用indexof去重
indexof是ES5新增的一種數組方法:用來返回某個元素在數組中位置的索引值,如果沒有該元素,就返回-1;
function unique(arr){
var newArr=[];
for(var i=0;i<arr.length;i++){
if(newArr.indexOf(arr[i])==-1){
newArr.push(arr[i]);
}
}
return newArr;
}
方法四:利用對象的屬性去重(推薦)
在創建一個對象時,對象的屬性不能重複,我們可以把每一個數組元素當做對象的屬性,利用對象屬性的無重複性來完成數組去重。
function unique(arr){
var newArr=[];
var obj={};
for(var i=0;i<arr.length;i++){
if(!obj[arr[i]]){
newArr.push(arr[i]);
obj[arr[i]]=1;
}
}
return newArr;
}
方法五:使用ES6的set結構去重
var arr=[2,2,2,2,3,4,6,12,6,3,12,1,2,3,2,6];
var set=new Set(arr);//輸出一個類數組結構
arr=[...set]; //將類數組對象轉化成數組
console.log(arr);
方法六:利用splice直接在原數組上操作
var arr=[2,2,2,2,3,4,6,12,6,3,12,1,2,3,2,6];
var len=arr.length;
for(var i=0;i<len;i++){
for(var j=i+1;j<len;j++){
if(arr[j]==arr[i]){
arr.splice(j,1);
len--; //截取一個元素,原數組的長度減1
j--;//將j的值減1,要不然會出現第一個元素和第三個元素比較的情況,會掠過第二個元素
}
}
}
console.log(arr);