首页前端开发其他前端知识JS给数组去重有哪些方式,分别是什么

JS给数组去重有哪些方式,分别是什么

时间2024-03-27 18:12:03发布访客分类其他前端知识浏览867
导读:在实际案例的操作过程中,我们可能会遇到“JS给数组去重有哪些方式,分别是什么”这样的问题,那么我们该如何处理和解决这样的情况呢?这篇小编就给大家总结了一些方法,具有一定的借鉴价值,希望对大家有所帮助,接下来就让小编带领大家一起了解看看吧。...
在实际案例的操作过程中,我们可能会遇到“JS给数组去重有哪些方式,分别是什么”这样的问题,那么我们该如何处理和解决这样的情况呢?这篇小编就给大家总结了一些方法,具有一定的借鉴价值,希望对大家有所帮助,接下来就让小编带领大家一起了解看看吧。

1.es5常用:利用for嵌套for,然后splice去重

    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]) {
     //第一个等同于第二个,splice方法删除第二个
                    arr.splice(j, 1);
    
                    j--;

                }

            }

        }
    
        return 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))

解析:两个null消失,nan和{ } 没有去重

2.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))

解析:去重代码少。但是无法去除{ } 空对象。

3.indexof去重

    function unique(arr) {

        if (!array.isarray(arr)) {

            console.log('type error!')
            return
        }
    
        var array = [];
    //新建空数组,for循环原数组,判断数组是否存在当前元素,如果相同的值跳过,不同push进数组
        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))

解析:nan、{ } 没有去重

4.sort()排序

//排序后的结果,遍历对比
    function unique(arr) {

        if (!array.isarray(arr)) {

            console.log('type error!')
            return
        }
    
        arr = arr.sort()
        var arrray = [arr[0]];
    
        for (var i = 0;
     i  arr.length;
 i++) {

            if (arr[i] !== arr[i - 1]) {
    
                arrray.push(arr[i]);

            }

        }

        return arrray
    }

    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))

解析:nan、{ } 没有去重

5.对象属性不能相同(不建议)

    function unique(arr) {

        if (!array.isarray(arr)) {

            console.log('type error!')
            return
        }
    
        var array = [];

        var obj = {
}
    ;
    
        for (var i = 0;
     i  arr.length;
 i++) {

            if (!obj[arr[i]]) {

                array.push(arr[i])
                obj[arr[i]] = 1
            }
 else {

                obj[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))

解析:两个true去掉,nan和{ } 没有去重

6.includes()

    function unique(arr) {

        if (!array.isarray(arr)) {

            console.log('type error!')
            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))

解析:{ } 没有去重

7.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)
    }
)
}

解析:所有都去重

8.filter

    function unique(arr) {

        return arr.filter(function (item, index, arr) {
    
            //当前元素,在原始数组中的第一个索引==当前索引值,否则返回当前元素
            return arr.indexof(item, 0) === index;

        }
    );

    }

    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))

解析:{ } 没有去重、nan两个都没有了

9.利用递归去重

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))

解析:nan和{ } 没有去重

10.map去重

    function arraynonrepeatfy(arr) {
    
        let map = new map();
    
        let array = new array();
     // 数组用于返回结果
        for (let i = 0;
     i  arr.length;
 i++) {

            if (map.has(arr[i])) {
     // 如果有该key值
                map.set(arr[i], true);

            }
 else {
    
                map.set(arr[i], false);
     // 如果没有该key值
                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(arraynonrepeatfy(arr))

解析:创建一个空map数据结构,遍历需要去重的数组,把数组的每一个元素作为key存到map中。由于map中不会出现相同的key值,所以最终得到的就是去重后的结果。{ } 空对象无法去重。

11.reduce+includes

    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));

解析:{ } 无法去重



以上就是关于JS给数组去重有哪些方式,分别是什么的介绍啦,需要的朋友可以参考上述内容,希望对大家有帮助,欢迎关注网络,小编将为大家输出更多高质量的实用文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

JS数组

若转载请注明出处: JS给数组去重有哪些方式,分别是什么
本文地址: https://pptw.com/jishu/654391.html
新手对JavaScript对节流,防抖动怎样理解 java中的for和foreach的区别分别是哪些?

游客 回复需填写必要信息