数组去重的方法


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

Set 直接去重(ES6 常用)

(Set)[https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Set] 对象允许存储任何类型的唯一值

(Array.form())[https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/from]对于类数组或是可迭代的对象进行浅拷贝,创建一个新的数组实例对象

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循环对比值是否相同(ES5 常用)

第一个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也可以看看我这篇总结

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


文章作者: 时秋
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 时秋 !
  目录