js数组去重问题

1. 双层循环:外层循环,内层比较值;

(1)利用splice直接在原数组进行操作

Array.prototype.delRepeat = function (){
 var arr = this;
 var i,j,len = arr.length;
 for(i = 0; i < len; i++){
  for(j = i + 1; j < len; j++){
   if(arr[i] == arr[j]){
    arr.splice(j,1);
    len--;
    j--;
   }
  }
 }
 return arr;
};
var a = [1,2,4,4,5,6,5,3,2,4,9,4,1,2,9,1,1];
console.log(a.delRepeat()); //[1, 2, 4, 5, 6, 3, 9]  

2. 利用对象的属性不能相同的特点进行去重 

Array.prototype.delRepeat = function (){
 var arr = this;
 var i;
 var obj = {};
 var result = [];
 for(i = 0; i< arr.length; i++){
  if(!obj[arr[i]]){ 
   obj[arr[i]] = 1;
   result.push(arr[i]);
  }
 }
 return result;
};
var a = [1,2,4,4,5,6,5,3,2,4,9,4,1,2,9,1,1];
console.log(a.delRepeat()); //[1, 2, 4, 5, 6, 3, 9]  

3. 利用ES6的set

 (1)利用Array.from将Set结构转换成数组

function delRepeat(array){
 return Array.from(new Set(array));
}
var a = [1,2,4,4,5,6,5,3,2,4,9,4,1,2,9,1,1];
console.log(a.delRepeat()); //[1, 2, 4, 5, 6, 3, 9]

 

 (2)拓展运算符(...)内部使用for...of循环

let arr = [1,2,4,4,5,6,5,3,2,4,9,4,1,2,9,1,1];
let resultArr = [...new Set(arr)]; 
console.log(resultArr); 

4.借助indexOf()方法,判断此元素在该数组中首次出现的位置下标与循环的下标是否相等

(1)不借助新数组,使用splice();

var ar = [1,2,4,4,5,6,5,3,2,4,9,4,1,2,9,1,1];
function delRepeat(arr){
  for (var i = 0; i < arr.length; i++) {
        if (arr.indexOf(arr[i]) != i) {
            arr.splice(i,1);//删除数组元素后数组长度减1后面的元素前移
            i--;//数组下标回退
        }
    }
     return arr;
 }

console.log( delRepeat(ar)); // [1, 2, 4, 5, 6, 3, 9]

(2)借助新数组;

var ar = [1,2,4,4,5,6,5,3,2,4,9,4,1,2,9,1,1];
function delRepeat(arr) {
 var result = [];
 for (var i = 0; i < arr.length; i++) {
  if (arr.indexOf(arr[i]) == i) {
  result.push(arr[i]);
  }
}
 return result;
}

console.log(delRepeat(ar)); // [1, 2, 4, 5, 6, 3, 9]  

(3)借助新数组  判断新数组中是否存在该元素如果不存在则将此元素添加到新数组中

Array.prototype.delRepeat = function(){
    var newArr = [];
    for(var i = 0; i < this.length; i++){
        if(newArr.indexOf(this[i])== -1){
            newArr.push(this[i]);
        }
    }
    return newArr;
}
var arr = [1,2,4,4,5,6,5,3,2,4,9,4,1,2,9,1,1];
console.log(arr.delRepeat()); // [1, 2, 4, 5, 6, 3, 9]  

5. 利用数组中的filter方法

var arr = ['a','f','b','p','e','a','o','f'];
var result = arr.filter(function(element,index,self){
  return self.indexOf(element) === index;
});
console.log(result); //["a", "f", "b", "p", "e", "o"]

 

 

  

  

 

  

 

  

 

  

 

 

  

 

posted @ 2018-10-15 23:49  Amy_World  阅读(176)  评论(0编辑  收藏  举报