前端面试之数组去重的方法

<script>
    //数组去重

    // 方法一  Es6 Set

    var arr = [1, 5, 6, 6, 8, 2, 1, 5]
    // 1.new Set(传入数组)
    var a = new Set([1, 5, 6, 6, 8, 2, 1, 5])
    console.log(a);//此时数组中的重复的元素被去除掉了,但是打印的格式为Set(5) {1, 5, 6, 8, 2},不是数组的形式
    //2.去重完毕,转换成数组 Array.from(set)
    var b = Array.from(a)
    console.log(b);//此时打印的结果为 [1, 5, 6, 8, 2]

    //方法二 indexOf indexOf(String str, int fromIndex): 返回从 fromIndex 位置开始查找指定字符String str在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。
    var arr = [1, 5, 6, 6, 8, 2, 1, 5]
    var arr1 = [];
    for (var i = 0; i < arr.length; i++) {//此for语句的目的是遍历数组arr,
        if (arr1.indexOf(arr[i]) === -1) {//arr1.indexOf(arr[i]) === -1表示数组arr1中没有arr中的元素,如果arr1中有arr里面的元素,则不会返回-1,就不会执行下面的操作
            // 此处的if语句中arr[i]中的i表示,不同索引号对应的arr里面的元素,indexOf( , )中第一个数据表示要查找的元素,第二个数据表示,从哪个索引开始查找,可以不写,不不写默认从头开始查找。
            //当i=0时,进入进入if语句此时,arr[0]为1,arr1.indexOf(1)在空数组arr1中查找1,因为没有对应的元素,所以此时会===-1,所以执行if下面的语句,此时arr1中出现了一个值1,当i=1时,arr[1]=5,arr1.indexOf(5),在数组arr1中查找元素5,但是没有对应的元素,所以此时仍然是===-1,所以执行if下面的语句,此时arr1中会多出一个元素5,。。。
            arr1.push(arr[i]) //表示将arr中满足条件的元素,推到arr1中
        }
    }
    console.log(arr1);

    //方法三   开关+双重for循环

    var arr = [1, 5, 6, 6, 8, 2, 1, 5]
    var arr1 = []
    for (var i = 0; i < arr.length; i++) { //外层执行一次,里层执行全部
        var flag = true //先设定开关为开
        for (var j = 0; j < arr1.length; j++) {//当j=0时,因为此时arr1为空数组,所以此时不会执行for里面的内容,会直接进入到最下面的if里面,此时arr1中被推入了一个元素1,此时一遍循环完成,进入下一次循环,i=1,进入第二个for,j=0时,进入第二个for里面的if语句,判断arr[1]是否等于arr1[0],不满足,判断arr[1]是否等于arr1[1],arr1[1]等于1,不满足,进入第二个if语句,此时arr1中被推入了一个5,再进行判断

            if (arr[i] === arr1[j]) { //表示在循环时,如果arr中的元素如果等于arr1中的元素,则开关 关闭,跳出里层这个for循环,然后,继续外层的循环
                flag = false
                break
            }
        }
        if (flag) {
            arr1.push(arr[i])
        }
    }
    console.log(arr1);
</script>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值