JS-数组去重

方法一

思路:创建一个空数组,循环原数组中的每一项,在添加到空数组中。在每次添加的时候验证新数组中是否包含当前遍历到的数组,若不包含则添加(数组中indexOf,lastIndexOf,includes在ie6,7,8不兼容)

let ary = [1, 2, 3, 2, 1, 3, 2, 1, 2, 3, 2, 1];
        let ary1 = [];
        ary.forEach(item => {
            if (!ary1.includes(item)) {
                ary1.push(item)
            }
        })
        console.log(ary1)

在这里插入图片描述

方法二

循环数组中的每一项,每一次拿出来的值都和它后面的值进行比较,相等删除掉当前项(注意有一个数组塌陷问题)
因为splice会导致原来数组长度改变
比如:

arr = [10,20,30];
for (let i = 0;i<arr.length;i++){
		arr.splice(i,1)
}
i = 0 ; i < 3 ; i++
arr.splice(0,1)
=>[20,30]
i = 1 ;i < 3;i++
arr.splice(1,1)
=>[20]
let ary = [1, 2, 3, 2, 1, 3, 2, 1, 2, 3, 2, 1];
        for (let i = 0; i < ary.length; i++) {
            let item = ary[i];
            for (let j = i + 1; j < ary.length; j++) {
                let compare = ary[j];
                if (compare === item) {
                    ary.splice(j, 1);
                    j--;
                }
            }
        }
        console.log(ary);

在这里插入图片描述

方法三

创建一个对象,循环数组中的每一项,把当前循环到的数当作对象的属性名和属性值存起来,如果当前这一项不存在,那么应该是undefined,属于重复的,就在数组中删除splice,注意数组塌陷问题。

let ary = [1, 2, 3, 2, 1, 3, 2, 1, 2, 3, 2, 1];
        let obj = {};
        for (let i = 0; i < ary.length; i++) {
            let item = ary[i];
            if (obj[item] !== undefined) {
                ary.splice(i, 1);
                i--;
                continue;
            }
            obj[item] = item
        }

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值