最常用的数组去重方法

技术博客 (190) 2024-01-07 09:01:01

整理了一下我最常用的三种数组去重方法,话不多说,直接上代码

1、indexOf()方法返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1

// 第一种方法 indexOf
    function test(arr) { 
   
        let newArr = []
        for(let i=0;i<arr.length;i++){ 
   
            // 如果该元素在数组中找不到 就会返回-1
            if(newArr.indexOf(arr[i])===-1){ 
   
                newArr.push(arr[i])
            }
        }
        return newArr
    }
    const arr = test([1,1,1,2,1,3,3,2])
    console.log(arr);

2、splice(index, n, item1, item2,…) 从索引 index 的位置开始删除 n 个元素,插入“item1” “item2”…

(注意:插入元素的数量可以是多个,也可以是0个,如果是0个,可以省略不写)

// 第二种方法 splice
    function newArr(arr) { 
   
        for(let i=0;i<arr.length;i++){ 
   
            for(let j=i+1;j<arr.length;j++){ 
   
                if(arr[i]===arr[j]){ 
   
                    // 如果数组中有两个不同索引的值相同,则去掉后面那个
                    arr.splice(j,1)
                    // 注意删掉一个数组元素之后,数组长度会-1,
                    // 后面值的索引会-1,所以j也需要-1,不然循环会跳过一个元素
                    j--
                }
            }
        }
        return arr
    }
    const arr = newArr([1,1,1,2,1,3,3,2])
    console.log(arr); 

3、ES6中的Set数据结构,类似于数组,但是成员的值是唯一的,不能重复

// 第三种方法 ES6中的Set数据结构,类似于数组,但是成员的值是唯一的,不能重复
    function get(arr) { 
   
        // Set本身是个构造函数,用来生成Set数据结构
        let set =new Set(arr)
        console.log(set);
        // Set数据结构毕竟不是数组,需要用Array.from()转化为数组
        return Array.from(set)
    }
    const arr = get([1,1,1,2,1,3,3,2])
    console.log(arr); 

不管是逻辑上,还是代码长度上,ES6的Set数据结构数组去重方法都是最简洁明了的,推荐使用

补充一个reduce去重

 <script>

        var arr = [1,1,1,3,2,5,4,3,5]
        const arr1 = arr.reduce((newArr,item)=>{ 
   
            newArr.includes(item)?newArr:newArr.push(item)
            return newArr
        },[])
        console.log(arr1);
        
    </script>
THE END

发表回复