常见的数组去重方法,Get!💪🏻

198 阅读3分钟

「这是我参与2022首次更文挑战的第5天,活动详情查看:2022首次更文挑战」。

Hello,大家好,我是知秋今天给大家的分享数组去重的方法,数组去重在项目里是经常用到的操作,也是面试经常问到的问题,作为一个开发工程师,掌握几种数组去重的方法是必不可少的,通过日常操作和网上收集我总结出一下几种数组去重的方法

Set 直接去重

Set 对象允许存储任何类型的唯一值

Array.form() 对于类数组或是可迭代的对象进行浅拷贝,创建一个新的数组实例对象

    function unique(arr) {
        return Array.from(new Set(arr))
    }

    const arr = [1,3,4,1,{},{}, null,null]

    console.log([...new Set(arr)])  // 简写方式

    console.log(unique(arr))  //[1, 3, 4,  {},  {}, null]

优点: 代码量少 缺点: 兼容性不好,无法去除空对象

双层for循环对比值是否相同

第一个for循环负责循环遍历元素,第二个for循环负责遍历值,每次的值遍历对比如果相同就删除第二个值

splice(start [, deleteCount] [,item1, item2 ...]) 起始值,删除个数, 插入值

function unique(arr){
	for(var i=0; i<arr.length; i++){
    	for(var j=i+1; j<arr.length; j++){
        	if(arr[i] == arr[j]){
               arr.splice(j, 1);
               	j--;
               }
        }
    }
  	return arr
}

indexOf 查找新数组里是否有相同的值

indexOf(searchElement[, fromIndex]) 查找数组中给定元素的第一个索引,没找到返回-1

定义一个新的空数组,循环元素组当没有在新定义数组里indexOf没要找到相同的值也就是等于-1时,就push到新数组里

    function unique(arr) {
        if(!Array.isArray(arr)){
            return console.log('type error!')
        }

        var currentArr = []
        for( var i = 0; i < arr.length; i++ ){ 
            if (currentArr.indexOf(arr[i]) == -1){
                currentArr.push(arr[i])
            }
        }

        return currentArr
    }

includes 查找新数组里是否包含相同的值

includes 用来查找数组中是否有指定元素的值,有就返回true

定义一个新的空数组,遍历传入数组的值是否包含在新数组中如果没有就push

    function unique(arr){
        var currentArr = []
        for(var i=0; i<arr.length; i++){
            if(!currentArr.includes(arr[i])){
                currentArr.push(arr[i])
            }
        }
        return currentArr
    }

sort 排序之后对比相邻的两个元素

sort 通过把元素转换成字符串比较UTF-16值升序排列

定义一个新数组把传入数组第一个元素加入,将传入数组sort排序之后比较当前和前一个值是否不相同,不相同就push到新数组

 function unique(arr) {
        var currentArr = [arr[0]]
        var arr = arr.sort()

        for(var i=1; i< arr.length; i++ ){
            if(arr[i] !== arr[i-1]){
                currentArr.push(arr[i])
            }

        }
        return currentArr
 }

filter 过滤出 indexOf 查找到数组中值出现的第一个位置

filter 用于过滤出符合条件的的数组

    function unique(arr) {
        return arr.filter(function(item,index,arr) {
            return arr.indexOf(item) === index
        })
    }

关于一些数组常用的API也可以看看我这篇总结

记住这18个数组操作API,效率开发必备

如果觉得对你有帮助,可以点赞收藏,有问题可以评论探讨~