JavaScript数组去重的两种方法

116 阅读2分钟

JavaScript去重的两种方法

方法一:利用内置数组对象的splice()方法

思路:

splice()方法可以增删数组内的元素

   splice()方法解析:
    slice(参数一,参数二,参数三.....)
    参数一:数组开始操作的索引(包括该索引的元素本身)
    参数二:删除数组元素的个数(数量可以是0,即等于不删除)
    参数三:在进行参数一和参数二的删除操作之后,在参数一的位置添加元素
    注意1:参数一必加,参数二和三属于可加可不加
    注意2:一个参数等于,该索引位置后面的数组元素全删除
    注意3:两个参数等于,该参数一索引位置后面的数组元素删除参数二的数量
            例如:arr.splice(0,2)  //删除arr[0] arr[1] 两个元素
    注意4:三个参数可以实现只增加数组元素功能
            例如:arr.splice(0,0,22)  //在数组索引0的位置删除0个元素,创建了arr[0]=22这个元素

实现原理:

用for语句遍历arr这个数组,第一层for语句遍历

第二层for语句遍历该元素后面的数组元素arr[i]

第二层for语句的if语句判断元素是否相同, 一旦相同就把后面的元素a[j]通过splice(j,1)方法去掉

实现代码如下:用arr数组当函数实参传入fn函数中,return返回去重后的arr数组

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        function fn(arr) {
            for (let i = 0; i < arr.length; i++) {      //遍历arr数组
                for (let j = i + 1; j < arr.length; j++) {   //遍历arr[i]项后面的数组元素a[j]
                    if (arr[i] === arr[j]) {   //判断是否有重复值
                        arr.splice(j, 1);     //去重splice方法操作
                    }
                }
            }
            return arr;    //返回去重后的数组
        }
        let arr = [48, 98, 48, 56, 123, 9, 53];  //需要去重的数组
        console.log(fn(arr));
    </script>
</body>
</html>

方法二:利用内置数组对象的indexOf()方法和push()方法配合空数组实现

思路:

一.利用空数组存放去重后的新数组
二.用indexOf方法判断新数组是否有改项,如果没有indexOf返回-1,则用push网新数组里面添加这个元素
注意1push(参数)方法是往数组最后面添加元素,参数是添加元素的内容
注意2indexOf(参数) 如果数组存在参数这个元素,则返回第一个该参数内容位置的索引值,假如不存在则返回-1

实现代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        let arr=[48,45,68,45,12,45,65,132];   //需要去重的就数组
        let newArr=[];                     //新数组,用来存放旧数组去重后的结果
        for(let i=0;i<arr.length;i++){     //遍历旧数组
            if(newArr.indexOf(arr[i])===-1){    //判断新数组是否存在相同元素
                newArr.push(arr[i]);
            }
        }
        console.log(newArr);           //打印显示去重后的新数组
    </script>
</body>
</html>