ducky_L

导航

js 手写数组去重

1、通过遍历原数组和新数组是否重复。new一个新数组存放已经遍历过的、唯一的元素。

function uniqueArr(list){
  var newArr= [list[0]];
  for(var i=1;i<list.length;i++){
    var isRepeat = false;
    for(var j=0;j<newArr.length;j++){
      if(list[i] == newArr[j]){
       isRepeat= true;
        break;
      }
    }
    if(!isRepeat){
      newArr.push(list[i]);
    }
  }
  return newArr;
}
var arr=['a','b','c','a','b'];
uniqueArr(arr);         //output:["a", "b", "c"]
var arr=[1,1,1,'1'];
uniqueArr(arr);         //output:[1]
var arr=[1,1,1,'1',,,,];
uniqueArr(arr);         //output:[1,undefined]

 

2、通过先排序,再与相邻的元素进行比较去重(排序之后相同的元素会相邻)

function uniqueArr(list){
  list.sort();//对数组进行排序
  var newArr= [];
  for(var i=1;i<list.length;i++){
    if(list[i]!==list[i+1])    newArr.push(list[i]);
  }
  return newArr;
}
var arr=['a','b','c','a','b'];
uniqueArr(arr);         //output:["a", "b", "c"]
var arr=[1,1,,,1,'1'];
uniqueArr(arr);         //output:["1",1]

3、新建一个对象进行存放,再遍历数组,判断对象是否存在该值(obj[i])

function uniqueArr(list){
  var obj= {},newArr=[list[0]];
  obj[list[0]]=true;
  for(var i=1;i<list.length;i++){
    if(!obj[list[i]]){
      obj[list[i]]=true;
      newArr.push(list[i]);
    }
  }
  return newArr;
}
var arr=['a','b','c','a','b'];
uniqueArr(arr);         //output:["a", "b", "c"]
var arr=[1,1,,,1,'1'];
uniqueArr(arr);         //output:[1,undefined]

4、通过indexOf进行判断(新建一个数据存放唯一的元素,遍历原数组判断(newArr.indexOf(oldArr[i])==-1))

function uniqueArr(list){
  var newArr=[list[0]];
  for(var i=1;i<list.length;i++){
    if(newArr.indexOf(list[i])==-1){
      newArr.push(list[i]);
    }
  }
  return newArr;
}
var arr=['a','b','c','a','b'];
uniqueArr(arr);         //output:["a", "b", "c"]
var arr=[1,1,,,1,'1'];
uniqueArr(arr);         //output:[1, undefined, '1']

5、使用ES6 SET数据结构进行去重:

function dedupe(array) { 
    return Array.from(new Set(array)); 
 } 
dedupe([1, 1, 2, 3]) // [1, 2, 3]
dedupe([1, '1',,, 2, 3])  // [1, '1', undefined, 2, 3]

 6、通过indexof与filter 进行去重

         function distinct(numberArr) {
                return numberArr.filter((item, index) => {
                    return numberArr.indexOf(item) === index
                })
            }  

      var arr=[1,1,,,1,'1'];
      distinct(arr); //[1, '1']

7、通过使用for…of 和include进行去重

            function distinctInclude(numberArr) {
                let result = []
                for (let i of numberArr) {
                    !result.includes(i) && result.push(i)
                }
                return result
            }

        var arr=[1,1,,,1,'1'];
        distinctInclude(arr);//[1, undefined, '1']

  

posted on 2017-08-01 18:19  ducky_L  阅读(161)  评论(0)    收藏  举报