js 数组去重

方法一

原理 :循环嵌套,一一对比

详情:定义新数组并存放原数组第一个元素,将元素组一一和新数组元素对比,若不同则存放在新数组中

代码:

function unique(arr){
 var res = [arr[0]];
 for(var i=1; i<arr.length; i++){
  var repeat = false;
  for(var j=0; j<res.length; j++){
   if(arr[i] === res[j]){
    repeat = true;
    break;
   }
  }
  if(!repeat){
   res.push(arr[i]);
  }
 }
 return res;
}

方法二

原理:有序数组,前后对比

详情:原数组排序生成数组2,定义新数组并存放数组2第一项,数组2的元素一一与新数组的最后一项对比,若不同存于新数组

代码:

function unique2(arr){
 var arr2 = arr.sort();
 var res = [arr2[0]];
 for(var i=1; i<arr2.length; i++){
  if(arr2[i] !== res[res.length-1]){
   res.push(arr2[i]);
  }
 } 
 return res;
}

方法三

原理:利用对象属性

详情:定义空的新数组,遍历原数组,查询对象中有没有原数组元素对象属性,若没有对象添加新属性值1,新数组添加元素

代码:

function unique3(arr){
    var arr2=[];
    var obj={};
    for(var i=0;i<arr.length;i++){
       if(!obj[arr[i]]){
         obj[arr[i]]=1;
         arr.push(arr[i]);
       }
    }
    return arr2;
}

方法四:

原理:数组 indexOf方法或includes方法,查找数组中有没有某一值

详情:定义新数组,遍历原数组,在新数组中查找原数组每一元素的位置,若-1则添加进新数组

代码:

//indexOf
function unique4(arr){
  var arr2=[];
  for(var i=0;i<arr.length;i++){
    if(arr2.indexOf(arr[i])<0){
      arr2.push(arr[i]);
    }
  }
  return arr2;
}
//includes
function unique4(arr){
  var arr2=[];
  for(var i=0;i<arr.length;i++){
    if(arr2.includes(arr[i])){
      arr2.push(arr[i]);
    }
  }
  return arr2;
}

 

 

方法五

原理:数组filter或forEach方法+includes或indexOf

详情:看代码

代码:

//indexOf+filter
function unique(arr){
 return arr.filter(function(element,index,self){
    return self.indexOf(element)===index;
  })
}
//includes+filter
function unique(arr){
var arr2=[];
arr.filter(function(element){
  return arr2.includes(element)?"":ar2.push(element);
})
return arr2;
}

//indexOf+forEach
function unique(arr){
 return arr.forEach(function(element,index,self){
    return self.indexOf(element)===index;
  })
}
//includes+forEach
function unique(arr){
  var arr2=[];
  arr.forEach(function(element){
    return arr2.includes(element)?"":ar2.push(element);
  })
  return arr2;
}

 

方法六:

原理:ES6 set

代码:

function unique(arr){
 //Set数据结构,它类似于数组,其成员的值都是唯一的
 return Array.from(new Set(arr)); // 利用Array.from将Set结构转换成数组
}

 

另:欢迎补充

posted @ 2018-10-19 11:49  乐逍遥_1992  阅读(147)  评论(0编辑  收藏  举报