每天一个小知识,快速回顾知识点,今天回顾-数组去重的方法

1.假设有一个数组,内部有许多重复的值(今天我们只考虑基本类型的值),需要将其重复的值去掉。

例如:

1
let arr=[1,1,2,2,3,3,4,4,5,6,7,'9',9]

方案一:利用Set数据结构

1
let newArr=Array.from(new Set(arr));//需要用Array.from将最后结果转化为数组,毕竟Set只是类数组<br>//console.log(newArr)   [1, 2, 3, 4, 5, 6, 7, '9', 9]

方案二:利用Array.prototype.indexOf()

说明:Array.prototype.indexOf()方法返回数组中第一次出现给定元素的下标,如果不存在则返回 -1。

1
let newArr=arr.filter((item,index)=>arr.indexOf(item)===index)//我们利用filter这个方法对数组中每一项值进行筛选,那么怎么筛选呢,就是找到数组中第一次出现的元素下标与当前循环时的index与相等时就筛选出去,例如遍历第一个元素时arr.indexOf(1)返回的是0,此时遍历的下标index正好也是0,所以就将1筛选出去啦,遍历第二个元素时arr.indexOf(1)返回的还是0,但是此时遍历的index下标是1,所以就不会筛选出去。//console.log(newArr)   [1, 2, 3, 4, 5, 6, 7, '9', 9]

方案三:利用Array.prototype.reduce()  

1
let newArr=arr.reduce((pre,next)=>pre.includes(next)?pre:pre.concat(next),[])//初始值为空数组,也是迭代完成后的返回值,判断遍历的下一项在不在数组内,不在就进行添加,如果在就不做处理<br>//console.log(newArr)   [1, 2, 3, 4, 5, 6, 7, '9', 9]

方案四:双重循环去重 

1
2
3
4
5
6
7
8
9
10
11
12
const deleteRepeatVal = (arr) => {
       for (let i = 0, len = arr.length; i < len; i++) {
         for (let j = i + 1; j < len; j++) {
           if (arr[i] === arr[j]) {
             arr.splice(j, 1);
             j--;
             len--;
           }
         }
       }
       return arr;
     };  

方案五:利用es6扩展运算结合Set

1
let newArr=[...new Set(arr)]//其实和方案一差不多,只是转化数组的方式不同罢了<br><br>//console.log(newArr)   [1, 2, 3, 4, 5, 6, 7, '9', 9]

方案六:遍历数组,将值作为对象的键进行判断

      function deleteRepeatVal(arr) {
        let obj = {};
        for (let i = 0; i < arr.length; i++) {
          if (obj[arr[i]]) { //如果对象的键有值,代表数组里的值重复了,需要将此项删除,并且将i进行--,因为数组长度减少了
            arr.splice(i, 1);
            i--;
            continue;
          }
          obj[arr[i]] = arr[i];//将值作为obj的键
        }

        return arr;
      }

好啦,今天就回顾这几个数组去重的方法啦,相信大家还有许多其他方法欢迎评论区进行讨论,最后留给大家思考题,今天我们只考虑了数值是基本类型的数组,如果有对象形式的数组又该怎么去重呢?  

  

posted @   汪小热  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示