数组去重的方法

本文介绍了五种不同的JavaScript去重技巧,包括双重for循环、ES6 Set、indexOf/indexOf方法、includes方法和filter方法。特别强调了filter方法利用indexOf的特性高效去重的过程,并展示了如何处理对象数组的独特挑战。
摘要由CSDN通过智能技术生成

去重的五种方法:

1. 双重for循环去重

2. ES6 Set去重

3. indexOf去重

4. includes去重

5. filter去重

    <script>
        //indexOf去重
        // function unique(arr) {
        //     var newArr = [];
        //     for (var i = 0; i < arr.length; i++)
        //         if (newArr.indexOf(arr[i]) === -1)
        //             newArr.push(arr[i]);
        //     return newArr;
        // }
        // var demo1 = unique(['green', 'red', 'blue', 'red', 'pink'])
        // console.log(demo1);

        //使用ES6Set去重 但是Set去重有一个弊端,他无法去重引用类型的数据。比如对象数组。
        // function quchong(Arr) {
        //     const newArr = Array.from(new Set(Arr));
        //     return newArr;
        // }
        // var demo2 = quchong(['1', '1', '2', '3', '3', '4', '5', '5', '6']);
        // console.log(demo2);

        //使用includes去重 去重方法和indexOf去重方法一样
        // const quchong1 = (arr) => {
        //     let newArr = [];
        //     for (let i = 0; i < arr.length; i++)
        //         if (!newArr.includes(arr[i])) newArr.push(arr[i]);
        //     return newArr;

        // }
        // var demo3 = quchong1(['green', 'red', 'blue', 'red', 'pink'])
        // console.log(demo3);

        //使用filter去重  使用filter配合indexOf()进行的去重过程
        const quchong2 = (arr) =>
            arr.filter((item, index) => arr.indexOf(item, 0) === index); 
        var demo4 = quchong2(['1', '1', '2', '3', '3', '4', '5', '5', '6']);
        console.log(demo4);

        //使用双重for循环去重
        const quchong3 = (arr) => {
            for (let i = 0, len = arr.length; i < len; i++) {
                for (let j = i + 1; j < len; j++) {
                    if (arr[i] === arr[j]) {
                        arr.splice(j, 1);
                        j--;
                        i--;
                    }
                }
            }
            return arr;
        }
        var demo5 = quchong3(['green', 'red', 'blue', 'red', 'pink'])
        console.log(demo5);
    </script>

其中使用filter去重://item表示arr数组中的所有元素  例 1,1,2,3,4,5,5,6  index为每个arr元素的索引 arr.indexOf(item) 打印出来的是arr数组中每个元素的索引如果arr数组中要有重复的元素,则会重复打印重复元素的第一个元素的索引  arr.indexOf(item,0) 

* 去除重复元素依靠的是indexOf总是返回第一个元素的位置,
后续的重复元素位置与indexOf返回的位置不相等,因此被filter滤掉了。*/

indexOf:可以判断一个元素是否在数组中存在,或者判断一个字符是否在字符串中存在,如果存在返回该元素或字符第一次出现的位置的索引,不存在返回-1。 

对象数组去重的方法

        // 对象数组去重
        const arrObj = [{
            id: 1,
            name: '狗华'
        }, {
            id: 2,
            name: '舒老八'
        }, {
            id: 1,
            name: '麻涛'
        }]

        const quchong4 = (arr) => {
            for (let i = 0, len = arr.length; i < len; i++) {
                for (let j = i + 1; j < len; j++) {
                    if (arr[i].id === arr[j].id) {
                        arr.splice(j, 1);
                        j--;
                        len--;
                    }
                }
            }
            return arr;
        }
        console.log(quchong4(arrObj));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值