数组去重的八种方法

1、利用数组.includes(数组元素)来判断 去重

 建立一个新数组,把原来数组里的元素一个个循环遍历放进新数组里,利用数组.includes(数组元素)判断新数组内是否有该元素,如果没有就放入。

 <script>
        function noreapeat(ary) {
            var resArr = []
            for (var i = 0; i < ary.length; i++) {
                var v = ary[i]
                var flag = resArr.includes(v)//判断新数组内是否有这个元素
                if (flag === false) {
                    // 如果没有,就把元素放进去
                    resArr.push(v)
                }
            }
            return resArr
        }
        var arr = [2, 2, 6, 6, 8, 8, 10]
        console.log(noreapeat(arr));
        //  [2, 6, 8, 10]
    </script>

 

 2、利用数组.indexOf(数据元素)来判断,去重

先建立一个新数组,将原数组进行循环遍历,把元素一个个放进新数组里,但只放新数组.indexOf(数据元素) === -1的元素

<script>
        function noreapeat(ary) {
            var resArr = []
            for (var i = 0; i < ary.length; i++) {
                var v = ary[i]
                var index = resArr.indexOf(v)
                if (index === -1) {
                    resArr.push(v)
                }
            }
            return resArr
        }
        var arr = [2,2,2,4,4,4,6,6,6,8,8]
        console.log(noreapeat(arr));
        //  [2, 4, 6, 8]
    </script>

 

 3、用双循环,让前面的元素和它后边的元素一个个进行比较,如果后边还有该元素,就删除

 <script>
        function noreapeat(ary) {
            ary = ary.slice(0)//这样就不直接在原数组内进行删除了,
            for (var i = 0; i < ary.length; i++) {
                var v = ary[i]
                for (var j = i + 1; j < ary.length; j++) {
                    // 让arr[j] 和v/arr[i] 进行比较,相等了 就把arr[j]删除
                    if (ary[j] === v) {
                        ary.splice(j, 1)
                        //如果arr[j]和arr[i]相等,并删除了,那么后一个元素就会往前移,那这个元素的下标就会改变,
                        // 但遍历一直在进行,j一直在++,那元素前移,就不能和arr[i]进行比较了,就干扰了判断
                        // 所以每次判断 删除以后,就让j再-- 一次,确保每个元素都能进行比较
                        j--
                    }
                }
            }
            return ary
        }
        var arr = [20,20,20,40,40,40,60,60]
        console.log(noreapeat(arr));
    </script>

 4、利用对象的键名(属性名)的唯一性

 <script>
        function noreapeat(ary) {
            var obj = {}//定义一个空对象
            //循环遍历数组,让数组的数据元素当对象的键名
            ary.forEach(function (v, i) {
                obj[v] = 'hello world'
            })
            // 定义一个空数组存放数据
            var resArr = []
            //现在键名已经不是重复的了,下一步就是取键名
            for (var k in obj) {
                // 因为此时的k是字符串,数组内应存数字,所以要把字符串转为数值类型
                resArr.push(k - 0)
            }
            return resArr;
        }
        var arr = [2, 2, 2, 4, 4, 4, 6, 6, 6, 8, 8, 8, 10, 10]
        console.log(noreapeat(arr))
        //[2,4,6,8,10]
    </script>

 5、利用set去重

 <script>
        function noreapeat(ary) {
            var resArr;
            return resArr = [...new Set(ary)]
        }
        var arr = [2, 2, 2, 4, 4, 4, 5, 5]
        console.log(noreapeat(arr))//[2, 4, 5];
    </script>

 6、利用filter去重 如果indexOf找出来的该元素的下标值和此时该元素的index值相等就过滤出来;

 <script>
        function noreapeat(ary) {
            var resArr;
            return resArr = ary.filter(function (item, index) {
                return ary.indexOf(item) == index;
            })
        }
        var arr = [4, 4, 4, 6, 6, 6, 8, 8, 8, 10, 10]
        console.log(noreapeat(arr));
        //[4, 6, 8, 10]
    </script>

 7、利用es6新增的map方法,map类似对象,可以存放键值对—属性名:属性值,再利用属性名唯一性去重

 <script>
        function noreapeat(ary) {
            var m = new Map();
            ary.forEach(function (item) {
                // 把数组元素当作属性名进行添加进新建的map
                m.set(item, 1)
            })
            var resArry;
            // 获取map里面的属性名转化成数据存进新数组里
            return resArry = [...m.keys()]
        }
        var arr = [20, 20, 20, 40, 40, 40, 60, 60]
        console.log(noreapeat(arr));
        //[20, 40, 60]
    </script>

 8、借助于第三库lodash去重

//在头部引入链接
<head>
    <script src="https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.21/lodash.js"></script>
</head>

//在body内

<body>
    <script>
        var res = _.uniq([2, 1, 2]);
        console.log(res);
        // [2,1]
    </script>
</body>

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Sure! 下面是常见的6种JavaScript数组去重方法: 1. 使用Set数据结构:Set是ES6引入的一种新的数据结构,它可以自动去除重复的值。 ```javascript const array = [1, 2, 3, 3, 4, 5, 5]; const uniqueArray = [...new Set(array)]; console.log(uniqueArray); ``` 2. 使用filter方法:使用filter方法遍历数组,然后通过indexOf判断当前元素在数组中的索引和当前索引是否相等,如果相等则保留,否则去除。 ```javascript const array = [1, 2, 3, 3, 4, 5, 5]; const uniqueArray = array.filter((value, index, self) => { return self.indexOf(value) === index; }); console.log(uniqueArray); ``` 3. 使用reduce方法:使用reduce方法遍历数组,将每个元素放入一个新数组中,同时使用includes方法判断新数组中是否已存在该元素。 ```javascript const array = [1, 2, 3, 3, 4, 5, 5]; const uniqueArray = array.reduce((acc, currentValue) => { if (!acc.includes(currentValue)) { acc.push(currentValue); } return acc; }, []); console.log(uniqueArray); ``` 4. 使用Map数据结构:使用Map数据结构可以根据键的唯一性去除重复值。 ```javascript const array = [1, 2, 3, 3, 4, 5, 5]; const uniqueArray = Array.from(new Map(array.map(value => [value, value])).values()); console.log(uniqueArray); ``` 5. 使用递归:使用递归来遍历数组,然后判断当前元素是否在之前的元素中出现过。 ```javascript const array = [1, 2, 3, 3, 4, 5, 5]; function unique(array) { if (array.length === 1) { return array; } if (array.slice(1).includes(array

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值