美文网首页
JS数组去重

JS数组去重

作者: Leonard被注册了 | 来源:发表于2019-11-15 10:42 被阅读0次

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

    1.双重for循环加splice()

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

    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数组去重

          本文链接:https://www.haomeiwen.com/subject/xikdictx.html