0


超全的12种数组去重的方法

前言

数组去重,可以说是一个比较常见的面试题,今天来盘点一下都有哪些方法可以实现数组去重。

方法1、双重for循环

这是一个最笨的方法,双重循环。

var arr =[1,2,3,4,5,6,4,3,8,1]// 数组去重:// 方法1: 双重for 循环functionnewArrFn(arr){// 创建一个新的空数组let newArr =[]for(let i =0;i<arr.length;i++){// 设置一个开关,如果是true,就存进去,不是就不存let  flag =truefor(let j =0;j<newArr.length;j++){// 原数组和新数组作比较,如果一致,开关变为 false
          arr[i]=== newArr[j]? flag =false: flag
        };
        flag ? newArr.push(arr[i]): newArr
      };return newArr
    }
    console.log(newArrFn(arr));

方法2、for循环 +findIndex

主要利用

findIndex

的特性,查找

元素找不到

返回-1

, 接下来就需要判断,如果是-1,说明没找到,就往新数组里面添加元素。

var arr =[1,2,3,4,5,6,4,3,8,1]// 数组去重:// 方法2: for + indexoffunctionnewArrFn(arr){let newArr =[]for(let i =0;i<arr.length;i++){
        newArr.indexOf(arr[i])===-1? newArr.push(arr[i]): newArr
      };return newArr
    }
    console.log(newArrFn(arr));

方法3、sort 排序

首先利用

sort 方法

进行排序。进行循环,如果原数组的

第 i 项

和新数组的

 i - 1

项不一致,就

push

进去。

var arr =[1,2,3,4,5,6,4,3,8,1]// 数组去重:// 方法3: for + sortfunctionnewArrFn(arr){
      arr = arr.sort()let newArr =[]for(let i =0;i<arr.length;i++){
        arr[i]=== arr[i-1]? newArr : newArr.push(arr[i])};return newArr
    }
    console.log(newArrFn(arr));

方法4、Set

ES6

中新增了数据类型Set,Set的一个最大的特点就是数据不重复。Set函数可以接受一个数组(或类数组对象)作为参数来初始化,利用该特性也能做到给数组去重。

var arr =[1,2,3,4,5,6,4,3,8,1]// 数组去重:// 方法4: setfunctionnewArrFn(arr){// .new Set方法,返回是一个类数组,需要结合 ...运算符,转成真实数组return([...newSet(arr)])}
    console.log(newArrFn(arr));

方法5、set + Array.from

利用 set数据不重复的特点,结合 Array.from

var arr =[1,2,3,4,5,6,4,3,8,1]// 数组去重:// 方法5: set + Array.fromfunctionnewArrFn(arr){// .new Set方法,返回是一个类数组,需要结合 Array.from ,转成真实数组return(Array.from(newSet(arr)))}
    console.log(newArrFn(arr));

方法6、filter + indexOf

indexOf,可以检测某一个元素在数组中出现的位置,找到返回该元素的下标,没找到返回 -1

var arr =[1,2,3,4,5,6,4,3,8,1]// 数组去重:// 方法6 :filter + findIndexfunctionnewArrFn(arr){// 利用indexOf检测元素在数组中第一次出现的位置是否和元素现在的位置相等,// 如果相等,说明数组中没有重复的returnArray.prototype.filter.call(arr,function(item, index){return arr.indexOf(item)=== index
       })}
    console.log(newArrFn(arr));

方法7、includes

利用

includes

检查新数组是否包含原数组的每一项。 如果不包含,就push进去

var arr =[1,2,3,4,5,6,4,3,8,1]// 数组去重:// 方法7 :for + includesfunctionnewArrFn(arr){// 利用includes 检查新数组是否包含原数组的每一项// 如果不包含,就push进去let newArr =[]for(let i =0;i<arr.length;i++){
        newArr.includes(arr[i])? newArr:  newArr.push(arr[i])};return newArr
    }
    console.log(newArrFn(arr));

方法 8、 for + object

利用对象属性名不能重复这一特点。如果对象中不存在,就可以给 push 进去

var arr =[1,2,3,4,5,6,4,3,8,1]// 数组去重:// 方法8 :for + objfunctionnewArrFn(arr){// 利用对象属性名不能重复这一特点// 如果对象中不存在,就可以给 push 进去let newArr =[]let obj ={}for(let i =0;i<arr.length;i++){if(!obj[arr[i]]){
          newArr.push(arr[i])
          obj[arr[i]]=1}else{
          obj[arr[i]]++}};return newArr
    }
    console.log(newArrFn(arr));

方法9、for + splice

利用 splice 进行切割

var arr =[1,2,3,4,5,6,4,3,8,1]// 数组去重:// 方法8 :for + splice// 利用 splice 进行切割。functionnewArrFn(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);
            j--}};}return arr
    }
    console.log(newArrFn(arr));

方法10、filter + indexOf

利用 filter 过滤 配合 indexOf 查找元素

var arr =[1,2,3,4,5,6,4,3,8,1]// 数组去重:// 方法10 :filter + indexOf// filter 过滤 配合 indexOf 查找元素functionnewArrFn(arr){return arr.filter((item, index)=>{return arr.indexOf(item)=== index
      })}
    console.log(newArrFn(arr));

方法11、Map

利用数据结构存值的特点

var arr =[1,2,3,4,5,6,4,3,8,1]// 数组去重:// 方法11 :MapfunctionnewArrFn(arr){let newArr =[]let map =newMap()for(let i =0;i<arr.length;i++){// 如果 map里面不包含,就设置进去if(!map.has(arr[i])){
          map.set(arr[i],true)
          newArr.push(arr[i])}};return newArr
    }
    console.log(newArrFn(arr));

方法12:reduce

var arr =[1,2,3,4,5,6,4,3,8,1]// 数组去重:// 方法12 :reducefunctionnewArrFn(arr){let newArr =[]return  arr.reduce((prev, next,index, arr)=>{// 如果包含,就返回原数据,不包含,就把新数据追加进去 return newArr.includes(next)? newArr :  newArr.push(next)},0)}
    console.log(newArrFn(arr));
标签: 前端

本文转载自: https://blog.csdn.net/m0_64564920/article/details/124056295
版权归原作者 追逐原野. 所有, 如有侵权,请联系我们删除。

“超全的12种数组去重的方法”的评论:

还没有评论