數(shù)組去重幾種常用的方式:
- 創(chuàng)建兩個(gè)數(shù)組,每一個(gè)元素都在新數(shù)組里尋找一次梗顺,兩次for循環(huán)(效率低泡孩,不推薦)车摄;
- 使用indexOf寺谤,查找重復(fù)元素并刪除,一次for循環(huán)吮播。(推薦)变屁;
- 引申,為Array拓展新方法意狠。(推薦)
- 定義去重?cái)?shù)組粟关,用call調(diào)用。 (推薦)
- es6的set方法(推薦)
兩次for循環(huán):
var arr = [1,2,3,4,1,2,5,3,6,4,7,9,3,2,4,9,1,1];
var newArr = [];
for(var i=arr.length-1;i>=0;i--){
for(var j=0;j<=newArr.length;j++){
if(arr[i]==newArr[j]){
break;
}else if(j==newArr.length){
newArr.push(arr[i])
break;
}
}
}
console.log(newArr)环戈;//Array [ 1, 2, 3, 4, 5, 6, 7, 9 ]
使用indexOf:
var arr = [1,2,3,4,1,2,5,3,6,4,7,9,3,2,4,9,1,1];
for(var i = 0;i<arr.length;i++){
while((a = arr.indexOf(arr[i],i+1)) != -1){
arr.splice(a,1);
}
}
console.log(arr)闷板;//Array [ 1, 2, 3, 4, 5, 6, 7, 9 ]
為Array拓展:
var arr = [1,2,3,4,1,2,5,3,6,4,7,9,3,2,4,9,1,1];
Array.prototype.disrepeat = function(){
var newArr = [];
for(var i = 0;i<this.length;i++){
if(newArr.indexOf(this[i])==-1){
newArr.push(this[i]);
}
}
return newArr;
}
var result = arr.disrepeat();
console.log(result);//Array [ 1, 2, 3, 4, 5, 6, 7, 9 ]
用call調(diào)用:
function disrepeat(){
var newArr = [];
for(var i = 0;i<this.length;i++){
if(newArr.indexOf(this[i])==-1){
newArr.push(this[i]);
}
}
return newArr;
}
var result = disrepeat.call(arr);
console.log(result);//Array [ 1, 2, 3, 4, 5, 6, 7, 9 ]
es6的set方法
//plan A
let arr = [1,2,3,4,2,3,2,3]
function disrepeat(arr) {
return [...new Set(arr)]
}
console.log('arr',disrepeat(arr))// arr [1,2,3,4]
// plan B
let arr2 = [2,3,3,2,1,3,4,5,1,3]
function disrepeat2(arr){
return Array.from(new Set(arr)).sort()
}
console.log('arr2',disrepeat2(arr2))// arr2 [1,2,3,4,5]