JavaScript中数组去重常用的五种方法详解

JavaScript中数组去重常用的五种方法详解

在JavaScript中数组去重是非常实用的技巧,可以帮助我们快速地去除数组中重复的元素,以减少数据的冗余和提高数据处理效率。接下来将详细介绍JavaScript数组去重的五种常用方法。

方法一:使用Set去重

使用Set可以轻松地实现数组去重,因为Set会自动去除重复的元素,而且Set可以很方便地转换为数组。

示例一:

let arr = ["apple", "pear", "orange", "apple", "orange", "grape"];
let set = new Set(arr);
console.log([...set]); // ["apple", "pear", "orange", "grape"]

在上面的示例中,我们先将数组转换为Set,然后通过扩展运算符(...)转换为数组,即可获得不重复的数组元素。

方法二:使用indexOf去重

使用indexOf也是一种常见的去重方式,通过找到元素在数组中第一次出现的位置,来判断是否重复。

示例二:

let arr = ["apple", "pear", "orange", "apple", "orange", "grape"];
let newArr = [];
for (let i = 0; i < arr.length; i++) {
  if (newArr.indexOf(arr[i]) === -1) {
    newArr.push(arr[i]);
  }
}
console.log(newArr); // ["apple", "pear", "orange", "grape"]

在上面的示例中,我们使用for循环遍历原数组arr,判断数组元素是否已经存在于newArr中,如果不存在就将其添加到newArr中,最后输出newArr即可。

方法三:使用includes去重

ES7中新增了includes方法,可以直接判断数组中是否包含某个元素,并可以替代indexOf的功能,同时还可以更加简洁地进行去重操作。

示例三:

let arr = ["apple", "pear", "orange", "apple", "orange", "grape"];
let newArr = [];
for (let i = 0; i < arr.length; i++) {
  if (!newArr.includes(arr[i])) {
    newArr.push(arr[i]);
  }
}
console.log(newArr); // ["apple", "pear", "orange", "grape"]

在上面的示例中,我们使用for循环遍历原数组arr,判断数组元素是否已经存在于newArr中,如果不存在就将其添加到newArr中,并使用includes替代了indexOf方法。

方法四:使用reduce去重

使用reduce方法可以更加简洁地实现数组去重,其内部实现原理是通过数组作为第一个参数,返回一个去重后的新数组。

示例四:

let arr = ["apple", "pear", "orange", "apple", "orange", "grape"];
let newArr = arr.reduce((prev, cur) => {
  if (!prev.includes(cur)) {
    prev.push(cur);
  }
  return prev;
}, []);
console.log(newArr); // ["apple", "pear", "orange", "grape"]

在上面的示例中,我们首先定义一个空数组作为reduce方法的初始值,然后在回调函数中遍历原数组,将去重后的元素添加到prev数组中,并最终返回一个去重后的新数组。

方法五:使用Map去重

使用Map的特性可以轻松实现数组去重,其原理是将数组元素作为Map的键名,Map的值可以随便赋值,因为我们只需要判定Map中是否包括某个键,而不用关心值的具体内容。

示例五:

let arr = ["apple", "pear", "orange", "apple", "orange", "grape"];
let map = new Map();
let newArr = [];
for (let i = 0; i < arr.length; i++) {
  if (!map.has(arr[i])) {
    map.set(arr[i], true);
    newArr.push(arr[i]);
  }
}
console.log(newArr); // ["apple", "pear", "orange", "grape"]

在上面的示例中,我们首先创建了一个空的Map对象,然后在for循环中遍历原数组,如果Map中不包含当前数组元素,就将其添加到Map中,并在newArr中添加该元素,最终输出newArr即可。

至此,JavaScript数组去重的五种常用方法就介绍完毕了,每种方法各有优缺点,可以根据实际应用场景,选择适合的方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript中数组去重常用的五种方法详解 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • Java如何基于反射机制获取不同的类

    获取不同类的过程: Java的反射机制主要通过三个类来实现,分别是Class、Constructor、Method。其中,Class是获取的入口类,Constructor和Method则分别负责获取类的构造函数和方法。通过使用这三个类可以获取不同的类和相关信息。 示例说明: 1.获取指定类的所有方法 假设我们有一个类Person,我们需要通过反射机制获取该类…

    other 2023年6月26日
    00
  • 关于c++:loadlibrary失败 错误代码193

    以下是“关于c++:loadlibrary失败错误代码193”的完整攻略: 1. 确认DLL文件是否存在 首先,我们需要确认程序所需的DLL文件是否存在。可以使用以下步骤: 打开Windows资源管理器并导航到DLL文件所在的目录。 确认DLL文件是否存在。 如果DLL文件不存在,则需要重新安装程序或手动安装所需的DLL文件。 2. 确认DLL文件是否与程序…

    other 2023年5月7日
    00
  • VS2015找不到win32位的控制台怎么解决?

    解决VS2015找不到win32位的控制台问题攻略 如果在使用Visual Studio 2015时遇到了找不到win32位的控制台的问题,可以按照以下步骤进行解决。 步骤一:检查安装配置 首先,确保你已经正确安装了Visual Studio 2015,并且选择了包含win32位开发工具的安装选项。如果你没有选择这个选项,你需要重新运行安装程序并选择正确的配…

    other 2023年7月28日
    00
  • 解析C++各种变量及区别

    解析C++各种变量及区别攻略 在C++中,有多种类型的变量可以用来存储不同类型的数据。了解这些变量的类型和区别对于编写高效的C++代码至关重要。下面是对C++各种变量类型及其区别的详细解析。 1. 基本数据类型 C++提供了一些基本的数据类型,用于存储整数、浮点数和字符等基本类型的数据。 整数类型 int: 用于存储整数值,通常占用4个字节。示例:int n…

    other 2023年7月29日
    00
  • ios12 beta4描述文件在哪下载 ios12beta4描述文件下载地址及安装教程

    iOS 12 Beta 4 描述文件下载攻略 下载描述文件 打开Safari浏览器,访问苹果开发者中心。 登录您的开发者账号。如果您没有账号,请先注册一个开发者账号。 在导航栏中找到 \”Downloads\”(下载)选项,并点击进入。 在下载页面中,找到 \”iOS 12 Beta 4\” 描述文件,并点击下载按钮。 确认下载完成后,描述文件将保存在您的设…

    other 2023年8月4日
    00
  • 浅谈PHP各环境下的伪静态配置

    以下是“浅谈PHP各环境下的伪静态配置”的完整攻略。 什么是伪静态 伪静态是指将动态生成的页面通过HTTP服务器进行处理,将网站的URL地址按照一定规则转换成和静态页面类似的形式呈现给搜索引擎或者访客,以伪装成静态页面。在伪静态的帮助下,可以提高网站页面的稳定、安全性,并且更好地支持搜索引擎爬取,从而提升网站的SEO优化效果。 PHP伪静态配置 下面将分别介…

    other 2023年6月27日
    00
  • SpringBoot配置文件中系统环境变量存在特殊字符的处理方式

    当Spring Boot配置文件中的系统环境变量(通常以${}形式表示)包含特殊字符时,需要进行处理。常见的两种特殊字符是冒号(:)和横线(-)。这些字符在Spring Boot配置文件中具有特殊含义,而在环境变量中也有可能出现。以下是处理这些特殊字符的几种方法: 方法1:使用反斜线转义特殊字符 可以在特殊字符前面加上反斜线(\)来转义它们。例如,如果配置文…

    other 2023年6月27日
    00
  • Java中的字符串常量池详细介绍

    Java中的字符串常量池详细介绍 在Java中,字符串常量池是一种特殊的内存区域,用于存储字符串常量。字符串常量池具有以下特点: 字符串常量池是在堆内存中的一部分,用于存储字符串常量。 字符串常量池中的字符串对象是不可变的,一旦创建就不能被修改。 字符串常量池中的字符串对象是共享的,多个引用可以指向同一个字符串对象。 字符串常量池的目的是提高性能和节省内存,…

    other 2023年10月15日
    00
合作推广
合作推广
分享本页
返回顶部