数组去重的几种方法

数组去重的几种方法


  1. ES6 Set去重(ES6常用) -不修改原数组

不考虑兼容性,这种去重的方法代码最少。这种方法还无法去掉“{}”空对象

    function unique(arr) {
        return Array.from(new Set(arr));
    }

  1. indexOf去重 -修改原数组
     function unique(arr) {
            for (let i = 0; i < arr.length; i++) {
                if (arr.indexOf(arr[i]) != i) {
                    arr.splice(i, 1);
                    i--;
                }
            }
            return arr;
        }

  1. indexOf去重 -不修改原数组

新建一个空数组,遍历原数组,判断新数组是否存在当前元素,如果有相同的值则跳过,否则push进数组。

    function unique(arr) {
        var brr = [];
        for (var i = 0; i < arr.length; i++) {
            if (brr.indexOf(arr[i]) === -1) {
                brr.push(arr[i]);
            }
        }
        return brr;
    }

  1. for 嵌套 for 然后 splice(ES5常用) -修改原数组

双层循环,外层循环元素,内层循环时比较值。值相同时,则删去这个值。

    function unique(arr) {
        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;
    }

  1. sort去重 -不修改原数组

利用sort()排序,然后进行遍历相邻元素。

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

  1. includes去重 -不修改原数组

使用includes方法,判断新数组是否存在,不存在则push

    function unique(arr) {
        var brr = [];
        for (var i = 0; i < arr.length; i++) {
            if (!brr.includes(arr[i])) {
                brr.push(arr[i]);
            }
        }
        return brr;
    }

  1. filter去重 -不修改原数组

     function unique(arr) {
         return arr.filter(function (item, index, arr) {
             return arr.indexOf(item, 0) === index;
         });
     }
    

参考文章,感谢博主!

https://segmentfault.com/a/1190000016418021?utm_source=tag-newest

你可能感兴趣的:(数组去重的几种方法)