JS数组去重

虽然没有一次面试遇到过这个题目,估计是考烂了不想考。。。但还是记录一下,毕竟知名度这么高的一个题目是吧?

1.双重for循环加splice()

function unique(arr){     
        if (!Array.isArray(arr)) {
            console.log('type error!')
            return;
        }       
        for(var i=0; i

2.includes()

function unique(arr) {
    if (!Array.isArray(arr)) {
        console.log('type error!')
        return;
    }
    var newArr =[];
    for(var i = 0; i < arr.length; i++) {
            if(!array.includes(arr[i])) {
                  array.push(arr[i]);
            }
    }
    return newArr; 
}

3.indexOf()

function unique(arr) {
    if (!Array.isArray(arr)) {
        console.log('type error!')
        return;
    }
    var newArr = [];
    for (var i = 0; i < arr.length; i++) {
        if (array.indexOf(arr[i]) === -1) {
            array.push(arr[i])
        }
    }
    return newArr;
}

4.ES6中的Set()

function unique(arr){
    if (!Array.isArray(arr)) {
        console.log('type error!')
        return;
    }
    return Array.from(new Set(arr));
}

5.sort()

function unique(arr){
  if (!Array.isArray(arr)) {
     console.log('type error!')
     return;
  }
  arr = arr.sort((a,b)=>a-b);
  var newArr = [arr[0]];
  var index = 0;
  for(var i = 1; i < arr.length; i++){
    if(newArr[index] === arr[i]) continue;
    index++;
    newArr.push(arr[i]);
  }
  return newArr;
}

6.hasOwnProperty()

function unique(arr) {
    if (!Array.isArray(arr)) {
     console.log('type error!')
     return;
    }
    var obj = {};
    return arr.filter(item => {
        return obj.hasOwnProperty(item) ? false : (obj[item] = true)
    })
}

7.filter()

function unique(arr) {
    if (!Array.isArray(arr)) {
     console.log('type error!')
     return;
    }
    return arr.filter((item,index) => {
      return arr.indexOf(item,0) === index;
    })
}

8.reduce()和includes()

function unique(arr) {
    if (!Array.isArray(arr)) {
     console.log('type error!')
     return;
    }
    return arr.reduce((pre,cur) => pre.includes(cur) ? pre : [...pre, cur],[])
}

9.递归去重

function unique(arr) {
    if (!Array.isArray(arr)) {
        console.log('type error!')
        return;
    }
    arr.sort((a,b) => a - b);
    function loopFn(index){
      if(index > 0){
        if(arr[index] === arr[index-1]){
        arr.splice(index,1);
        }
        loopFn(index-1);
      }
    }
    loopFn(arr.length-1);
    return arr;
}

10.ES6中的Map数据结构

function unique(arr) {
    if (!Array.isArray(arr)) {
        console.log('type error!')
        return;
    }
    let m = new Map();
    let newArr = [];
    for(let i = 0; i < arr.length; i++){
      if(m.has(arr[i])){
        m.set(arr[i],true);
        continue;
      }
      m.set(arr[i],false);
      newArr.push(arr[i]);
    }
  return newArr;
}

11.利用对象的特性

function unique(arr) {
    if (!Array.isArray(arr)) {
        console.log('type error!')
        return
    }
    var newArr= [];
    var obj = {};
    for (var i = 0; i < arr.length; i++) {
        if (!obj[arr[i]]) {
            newArr.push(arr[i])
            obj[arr[i]] = 1
        } else {
            obj[arr[i]]++
        }
    }
    return newArr;
}

12.ES6中的展开运算符和Set()

function unique(arr){
    if (!Array.isArray(arr)) {
        console.log('type error!')
        return;
    }
    return [...new Set(arr)]    // 去重,有时候就是这么简单
}

你可能感兴趣的:(JS数组去重)