zoukankan      html  css  js  c++  java
  • 数组去重

    1 使用es6的set方法去重

    function unique (arr) {
      return Array.from(new Set(arr))
    }
    var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
    console.log(unique(arr))
     //[1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {}, {}],   // 无法去掉{}对象

    2 使用indexOf去重

    function unique(arr) {
        if (!Array.isArray(arr)) {return
        }
        var array = [];
        for (var i = 0; i < arr.length; i++) {
            if (array .indexOf(arr[i]) === -1) {
                array .push(arr[i])
            }
        }
        return array;
    }
    var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
    console.log(unique(arr))
       // [1, "true", true, 15, false, undefined, null, NaN, NaN, "NaN", 0, "a", {…}, {…}]  // NaN、{}没有去重

    3 使用sort()排序方法,然后根据排序后的结果进行遍历及相邻元素比对

    function unique(arr) {
        if (!Array.isArray(arr)) {
            console.log('type error!')
            return;
        }
        arr.sort(function(a,b){   //排序后更加方便去重
            return a - b;
        });
        var arrry= [arr[0]];
        for (var i = 1; i < arr.length; i++) {
            if (arr[i] !== arr[i-1]) {
                arrry.push(arr[i]);
            }
        }
        return arrry;
    }
        var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
        console.log(unique(arr))
    // [0, 1, 15, "NaN", NaN, NaN, {…}, {…}, "a", false, null, true, "true", undefined]      //NaN、{}没有去重

    4 使用includes

    function unique(arr) {
        if (!Array.isArray(arr)) {return
        }
        var array =[];
        for(var i = 0; i < arr.length; i++) {
                if( !array.includes( arr[i]) ) { //includes 检测数组是否有某个值
                        array.push(arr[i]);
                  }
        }
        return array
    }
    var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
        console.log(unique(arr))
        //[1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {…}, {…}]     //{}没有去重

    5 使用hasOwnProperty

    function unique(arr) {
        var obj = {};
        return arr.filter(function(item, index, arr){
            return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true)
        })
    }
        var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
            console.log(unique(arr))
    //[1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {}]   // 所有的都去重了

    6 使用递归去重

    function unique(arr) {
            var array= arr;
            var len = array.length;
    
        array.sort(function(a,b){   //排序后更加方便去重
            return a - b;
        })
    
        function loop(index){
            if(index >= 1){
                if(array[index] === array[index-1]){
                    array.splice(index,1);
                }
                loop(index - 1);    // 递归loop,然后数组去重
            }
        }
        loop(len-1);
        return array;
    }
     var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
    console.log(unique(arr))
    //[1, "a", "true", true, 15, false, 1, {…}, null, NaN, NaN, "NaN", 0, "a", {…}, undefined]

    7 使用reduce去重

    function unique(arr){
        return arr.reduce((prev,cur) => prev.includes(cur) ? prev : [...prev,cur],[]);
    }
    var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
    console.log(unique(arr));
    // [1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {…}, {…}]

    8  [...new Set(arr)]

    var arr = [1,3,6,8,4,2,6,9,1],
        a = {};
    for(var item of arr){
        a[item] = true;
    }
    console.log(Object.keys(a));   // 有问题,数组里的每个数字都会变成字符串

    原文:https://segmentfault.com/a/1190000016418021

  • 相关阅读:
    我也要学C语言第十三章:复合数据类型—指针与指针变量(一)
    汇编语言程序设计学习笔记(第一遍学习)第1节:机器语言编程到汇编语言的产生
    汇编语言程序设计学习笔记(第一遍学习)第2节:寄存器
    我也要学C语言第十二章:编译预处理——带参数的宏
    PHP 清除HTML代码、空格、回车换行符的函数
    C#流程控制
    php引用(&)详解
    PHP defined() 函数
    PHP程序员最易犯10种错
    C# 函数
  • 原文地址:https://www.cnblogs.com/xjy20170907/p/12672737.html
Copyright © 2011-2022 走看看