首页 > 其他分享 >数组去重的方法

数组去重的方法

时间:2023-08-02 13:44:34浏览次数:34  
标签:arr console log let result 数组 方法

1、双重for循环 + splice( )

思路:数组的 splice() 方法删除当前重复元素,第一个参数是开始的值,第二个参数是需要删除的个数。

      let arr = ["a", "the", "a", "b", "test", "good", "the", "a", "good", "a"];
      //   第一次循环数组
      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--;
          }
        }
      }
      // 输出结果为: ['b', 'test', 'the', 'good', 'a']
      console.log(arr);

2、for 循环 + indexOf( ) 

思路:数组的 indexOf( ) 方法判断是否存在该数,如果不存在则返回 -1。

  let arr = [1, 2, 3, 4, 5, 2, 1, 2, 3, 4, 1];
      // 定义空数组接收新数组
      let temp = [];
      for (let i = 0; i < arr.length; i++) {
        // 判断新数组是否存在该数,不存在则返回-1
        if (temp.indexOf(arr[i]) === -1) {
          // 如果不存在该数则把它push()到新数组
          temp.push(arr[i]);
        }
      }
      // 输出结果为: [1,2,3,4,5]
      console.log(temp);

 3、for 循环 + includes ( ) 

思路:数组的 includes ( ) 方法判断某一数组是否包含某元素  返回的是一个布尔值。

let arr = [1, 2, 3, 4, 5, 2, 1, 2];
      // 定义空数组接收新数组
      let result = [];
      for (let i = 0; i < arr.length; i++) {
        // 判断新数组是否存在该数,不存在则返回false
        if (!result.includes(arr[i])) {
          // 如果不存在该数则push()到新数组
          result.push(arr[i]);
        }
      }
      // 输出结果为:[1,2,3,4,5]
      console.log(result);

 4、new Set( )

思路:ES6中新增的数据类型Set ,特点是其值总是唯一的、不重复的。

 let arr = [1, 2, 4, 3, 2, 1, 4, 5];
      // 使用...运算符展开去重的数组
      let result = [...new Set(arr)];
     // 输出结果为: [1, 2, 4, 3, 5]
      console.log(result);

5、new Set( ) + Array.from( )

思路:利用Set不重复的特点结合Array.from( )方法将其转化为真实的数组。

 let arr = [1, 2, 4, 3, 2, 1, 4, 5];
      // Array.from()将set去重后的数值变成真实的数组
      let result = Array.from(new Set(arr));
     // 输出结果为: [1, 2, 4, 3, 5]
      console.log(result);

 6、filter( ) + indexOf( ) 

思路:使用 indexOf( ) 做判断条件,filter( )创建新数组通过返回值为true或false决定是否保留。

 let arr = [1, 2, 4, 3, 2, 1, 4, 5];
      // 语法:Array.filter(function(currentValue, index, arr), thisValue)
      let result = arr.filter((item, index, self) => {
        // 当前元素,在原始数组中的第一个索引 === 当前索引值,
        return self.indexOf(item) == index;
      });
      // 输出结果为:[1, 2, 4, 3, 5]
      console.log(result);

7、reduce( ) + includes( )

思路:reduce( )遍历和传入一个空数组作为去重后的新数组,然后内部判断新数组中是否存在当前遍历的元素,不存在就插入新数组。

 let arr = [1, 3, 4, 2, 1, 4, 2, 5, 3];
      // 语法:Array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
      // total:初始值或计算结束后的返回值, currentValue:当前元素。这两个参数是必填
      const newArray = arr.reduce((newArr, element) => {
        if (!newArr.includes(element)) {
          newArr.push(element);
        }
        return newArr;
      }, []);
    // 输出结果为: [1, 3, 4, 2, 5]
      console.log(newArray);

8、for循环 + sort( )

思路:首先利用 sort( ) 进行排序。进行循环,如果原数组的第 i 项和新数组的 i - 1 项不一致,就push进去。

  let arr = [1, 2, 3, 1, 3, 5, 4, 2, 1, 3];
      let newArray = [];
      // 首先对原数组进行排序
      arr = arr.sort();
      for (let i = 0; i < arr.length; i++) {
        // 判断条件:当前元素是否与下一个元素相等
        arr[i] == arr[i + 1] ? newArray : newArray.push(arr[i]);
      }
    // 输出结果为:[1, 2, 3, 4, 5]
      console.log(newArray);

9、new Map( )

思路:利用Map的键值对同名覆盖,再将Map转数组。

  let arr = [1, 2, 3, 2, 4, 1, 5, 2, 4, 2];
      // map()方法:返回一个新数组,不会修改原数组,且不会对空数组进行检测。
      let map = new Map();
      let newArr = [];
      for (let i = 0; i < arr.length; i++) {
        // has():检测map对象中键是否存在,存在返回true,不存在返回false。
        if (!map.has(arr[i])) {
          // set():为map对象添加键值对,方法里里面跟两个参数(键,值),如果只传入一个参数,则值为undefine。
          map.set(arr[i], true);
          newArr.push(arr[i]);
        }
      }
    // 输出结果为:[1, 2, 3, 4, 5]
      console.log(newArr);

标签:arr,console,log,let,result,数组,方法
From: https://www.cnblogs.com/wanker/p/17599495.html

相关文章

  • 对于这种两个p之间的行间距使用margin隔开但是间距总是过大的解决方法——将margin的
    问题先给个需要的结果图在学习前端的时候老是会出现这种情况图片代码/*ul到li内部的CSS样式*/.box.contentul{display:flex;width:1245px;height:405px;}.box.contentulli{text-align:center;width:304px;margin-righ......
  • PROFINet转RS485协议Modbus网关方法
    产品概述你是否曾经遇到过不同网络协议之间的沟通问题?捷米特JM-RTU-PN为你解决这个难题!捷米特JM-RTU-PN是一款数据通讯模块,能够实现PROFINet网络与Modbus网络之间的数据传输。它可以将RS485网络连接到PROFINet网络,并支持不同的Modbus通讯波特率和设置。也就是说,它可以将Modbus......
  • 服务器多机负载配置器打不开的解决方法
    在前面的时间里,发布了多机负载配置器3.5版本,但如果你在服务器上打不开,那么该怎么办呢?官方已经提供了解决方案,现在多多通过图文教程来告诉大家如何解决打不开的问题。如果软件在您的服务器打不开,请按以下操作添加以下数据执行保护操作单击我的电脑—右键—属性。点击—高级—选项卡......
  • nnUNet 使用方法
    首先明确分割任务。其次明确研究方法和步骤。再做好前期准备,如数据集的采集、标注以及其中的训练集/测试集划分。其中的参考链接: (四:2020.07.28)nnUNet最舒服的训练教程(让我的奶奶也会用nnUNet(上))(21.04.20更新)_nnuet制定计划_花卷汤圆的博客-CSDN博客 最后,如果你需要具体的评......
  • C# 确定文件编码格式的方法
    当我们用System.IO.StreamReader读取包含汉字的txt文件时,经常会读出乱码(StreamWriater写文本文件也有类似的问题),原因很简单,就是文件的编码(encoding)和StreamReader/Writer的encoding不对应。为了解决这个问题,我写了一个类,来取得一个文本文件的encoding,这样我们就可以创建对应的Str......
  • PHPGET请求的加密方法简介
    PHPGET请求的加密方法简介在Web开发中,经常会使用GET请求来获取远程服务器上的数据。然而,GET请求的数据通过URL传递,容易被拦截者获取并窃取其中的敏感信息。为了解决这个问题,我们可以采用加密方法来保护数据的安全性。PHPGET请求的加密方法简介下面介绍几种PHPGET请求的加密方法......
  • PHPHashtable 如何优化数组查找和排序
    PHPHashtable如何优化数组查找和排序PHP是一种高度流行的编程语言,被广泛用于web开发。它有很多的优点,例如易于学习、跨平台、简单易用的语法等等。而在PHP中,数组是一种非常常用的数据结构,它可以存储一组有序的数据,方便我们进行各种操作。PHPHashtable如何优化数组查找和排......
  • 统信UOS专业版 apt update失败问题解决方法
    UOSaptupdate时提示‘仓库“https://pro-store-packages.uniontech.com/appstoreeagle-proInRelease”的签名不再生效’只需要更改/etc/apt/sources.list.d/appstore.list文件内容,改为debhttps://com-store-packages.uniontech.com/appstoredeepinappstore同时,建......
  • Java list的遍历方法
    1.把List当作一个数组,从数组的第一个位置开始循环到数组的最后位置for(inti=0;i<list.size();i++){System.out.println(list.get(i));}2.foreach 方法语法:for(数据类型变量名:数组){需要执行的语句块;//这里的变量名可以直接用}for(Integernum:li......
  • 后缀数组(SA)做题记录
    SA真的是个好东西,好呀好东西。基础定义:$sa$数组:后缀排序后排名为$i$的后缀的起始位置下标。$rk$数组:起始下标为$i$的后缀的排名。$height$数组:后缀排序后排名为$i$和$i-1$的最长公共前缀长度(Lcp)模板:(小bug:在SA代码charch[N];structSuffix_Array{llm=......