数组去重

本文详细介绍了五种数组去重的技术,包括排序法、开关法、indexOf()法、对象法以及ES6的Set集合法。每种方法都有其独特的实现逻辑和适用场景,为开发者提供了丰富的选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script>
        
        var arr = [20,55,66,80,99,20,66];//[20,55,66,80,99]

        //1.排序法

        // //1.1 声明空数组存储去重后的数组
        // var newArr = [];
        // //1.2 对arr排序
        // arr.sort(function(a,b){
        //     return a-b;
        // });
        // //1.3 遍历arr,检查arr[i]与arr[i+1]是否相等。如果不等说明没有重复添加到newArr
        // for(var i = 0;i<arr.length;i++){
        //     if(arr[i] != arr[i+1]){
        //         newArr.push(arr[i]);
        //     };
        // };
        // console.log(newArr);
        

        //2.开关法(假设成立法)
        //2.1 声明空数组存储去重后的数组
        var newArr = [];
        //2.2 遍历arr检查arr[i]在不在newArr中
        for(var i = 0;i<arr.length;i++){
            //开关法
            //(1)假设arr[i]可以添加到newArr (不在)
            var isOk = true;
            //(2)遍历newArr,让arr[i]与每一个newArr元素比较。 只要有元素相等,开关变成false
            for(var j = 0;j<newArr.length;j++){
                if(arr[i] == newArr[j]){
                    isOk = false;
                    break;//一旦重复就没有必要检查
                };
            };
            //(3)根据开关的值实现需求
            if(isOk){
                newArr.push(arr[i]);
            };
        };

        console.log(newArr);
        

        //3.indexOf()
        //2.1 声明空数组存储去重后的数组
        var newArr = [];
        //2.2 遍历arr检查arr[i]在不在newArr中
        for(var i = 0;i<arr.length;i++){
            //indexOf() : 检查arr[i]在不在newArr中
            if(newArr.indexOf(arr[i]) == -1){
                newArr.push(arr[i]);
            }
        };

        console.log(newArr);
        

        //4.对象法 (核心原理:利用对象属性名不能重复)
        /* 对象取值与赋值特点 
        
        取值
            属性名存在:获取属性值
            不存在:获取undefined
        赋值
            属性名存在: 修改属性值
            属性名不存在:则动态添加

        
         */

        var newArr = [];//声明空数组存储去重的数组
        var obj = {};//记录元素是否重复
        for(var i = 0;i<arr.length;i++){
            //判断obj有没有一个属性名叫做 arr[i]
            if(obj[ arr[i] ] == undefined){// arr[i]没有重复
                newArr.push(arr[i]);
                obj[ arr[i] ] = 1;//给obj添加一个 arr[i] 属性,表示已经出现过了
            }else{//如果不是第一次出现,就自增。记录出现次数
                obj[ arr[i] ]++;
            };
        };

        console.log(newArr);
        

        

    </script>
</body>
</html>
/* 
    1.ES6新增数据类型: Set
        集合,类似于ES5中的数组。 和数组唯一的区别,Set没有重复元素
    2.应用场景 : 数组去重
*/

// //1.基本使用
// var arr = [10,20,55,66,25,20,100,80,66];
// var set = new Set(arr);
// console.log(set);//{ 10, 20, 55, 66, 25, 100, 80 }

// //去重
// var arr1 = [...set];
// console.log(arr1);


//2.经典场景 : 一行代码实现数组去重

var arr = [10,50,60,88,10,50,25];

// //(1)使用set去重
// var set = new Set(arr);
// console.log(set);
// //(2)使用拓展运算符将set转成数组
// var arr1 = [...set];
// console.log(arr1);

var arr1 = [...new Set(arr)];
console.log(arr1);


// let res = (function(n){ return n==1?1:arguments.callee(n-1)})(5);
// console.log(res);//120






 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

blueSky-fan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值