广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JS实现数组去重的11种方法总结
  • 531
分享到

JS实现数组去重的11种方法总结

2024-04-02 19:04:59 531人浏览 安东尼
摘要

目录1.ES5常用:利用for嵌套for,然后splice去重2.es6常用:Set去重3.indexOf去重4.sort()排序5.对象属性不能相同(不建议)6.includes(

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实现数组去重的11种方法总结的详细内容,更多关于JS数组去重的资料请关注编程网其它相关文章!

--结束END--

本文标题: JS实现数组去重的11种方法总结

本文链接: https://www.lsjlt.com/news/145016.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JS实现数组去重的11种方法总结
    目录1.ES5常用:利用for嵌套for,然后splice去重2.ES6常用:Set去重3.indexOf去重4.sort()排序5.对象属性不能相同(不建议)6.includes(...
    99+
    2022-11-13
  • js数组去重的11种方法
    在实际工作或面试中,我们经常会遇到“数组去重”问题,接下来就是使用js实现的数组去重的多种方法: 1.将数组的每一个元素依次与其他元素做比较,发现重复元素,删除 var arr ...
    99+
    2022-11-12
  • js数组去重常见的方法汇总(7种)
    目录1、借助ES6提供的Set结构 new Set() 简单好用 强烈推荐2、利用 filter() 去重3、利用for 循环 搭配 indexOf 去重4、将数组的每一个元素依次与...
    99+
    2022-11-13
  • 七种JS实现数组去重的方式
    目录1.利用Set()+Array.from() 2.利用两层循环+数组的splice方法 3.利用数组的indexOf方法 4.利用数组的includes方法 5.利用数组的fil...
    99+
    2022-11-12
  • SQL去重的3种实用方法总结
    目录1.distinct去重2.group by去重3.row_number() over (parttion by 分组列 order by 排序列)补充:SQL根据某列或几列分组去重——row...
    99+
    2022-10-26
  • JS数组去重的常用4种方法
    1.ES6的Set类数组去重 var arr = [1,2,2,3,3,4,4,1,5,6,6,5] function unique (arr) { return Array.f...
    99+
    2022-11-13
  • js六种数组去重的方法是什么
    这篇文章主要介绍了js六种数组去重的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇js六种数组去重的方法是什么文章都会有所收获,下面我们一起来看看吧。 第一种 ne...
    99+
    2022-10-19
  • JavaScript实现数组去重的7种方法
    目录前言方法实现双循环去重indexOf方法去重1indexOf方法去重2相邻元素去重利用对象属性去重set与解构赋值去重Array.from与set去重总结前言 去重是开发中经常会...
    99+
    2022-11-13
  • JS实现数组去重的方法有哪些
    这篇文章主要介绍了JS实现数组去重的方法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JS实现数组去重的方法有哪些文章都会有所收获,下面我们一起来看看吧。1.ES5常用:利用for嵌套for,然后spli...
    99+
    2023-06-29
  • 非常全面的12种js数组去重的方法
    目录前言方法1、双重for循环方法2、for循环 +findIndex方法3、sort 排序方法4、Set方法5、set + Array.from方法6、filter + index...
    99+
    2022-11-13
  • 七种JS实现数组去重的方式分别是什么
    这篇文章将为大家详细讲解有关七种JS实现数组去重的方式分别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。例:将下面数组去除重复元素(以多种数据类型为例)const arr&n...
    99+
    2023-06-22
  • JavaScript实现数组对象去重的多种方法
    目录JavaScript实现数组对象去重的多种方法一、使用 Set 对象:二、使用`reduce`方法:三、使用`filter`方法补充:js数组对象去重1、使用reduce()方法...
    99+
    2023-02-10
    js数组对象去重 js数组去重
  • JS数组去重的九种高阶方法(亲测有效)
    前言 一般的方法此处也不列举了,还是有很多的,如双层循环判断是否相等,或新建数组比较再push等等,需要注意的是,使用splice方法移除元素时,有可能会导致数组塌陷问题,需要处理一...
    99+
    2022-11-12
  • js数组去重的方法有哪些
    js数组去重的方法有使用Set、使用indexOf、使用includes、使用filter和使用reduce。1、使用Set,特点是集合中的元素不会重复;2、使用indexOf,可以返回指定元素在数组中的第一个索引位置;3、使用includ...
    99+
    2023-08-09
  • JS对象数组去重的3种方法示例及对比
    目录一.去重前后数据对比二.使用方法1.使用filter和Map2.使用reduce3.使用for循环三.2400条数据,三种方法处理时间对比总结一.去重前后数据对比 // 原数...
    99+
    2022-11-12
  • JavaScript实现字符串转数组的6种方法总结
    目录1、 使用 .split('')2、使用扩展语法 ([…str])3、使用 Array.from(str)4、使用 Object.assign([]...
    99+
    2022-11-13
  • Javascript数组去重的几种方法详解
    目录数组去重1 双层for循环(类似冒泡排序的双层循环写法)2 循环和indexof、循环和includes3 利用对象属性不能重复去重4 ES6 Set5 ES6 Array. p...
    99+
    2022-11-12
  • JavaScript数组去重的几种方法详谈
    目录一、Set去重二、双重for循环去重三、利用indexOf去重四、利用icludes去重五、filter六、Map总结一、Set去重 function funSet(arr...
    99+
    2022-11-12
  • JS对象数组去重的方法有哪些
    本篇内容介绍了“JS对象数组去重的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录一.去重前后数据对比二.使用方法使用filte...
    99+
    2023-06-20
  • PHP数组去重的5种方法有哪些
    一、array_unique()函数 这是PHP自带的一个数组去重函数!我们可以用这个函数很方便地去除数组中的重复元素,但它并不会改变原数组的顺序。 二、array_flip()函数 array_flip()函数首先会将数...
    99+
    2023-10-29
    数组 种方法 有哪些
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作