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日

相关文章

  • 小米AI通话如何自定义内容?小米AI通话自定义内容教程

    小米AI通话自定义内容攻略 小米AI通话是一款基于语音识别、自然语言处理等人工智能技术的智能语音助手。通过自定义小米AI通话内容,可以让小米AI通话更好地适配不同的场景和任务,提高用户的交互体验。下面详细讲解小米AI通话如何自定义内容和对应的教程。 1. 自定义小米AI通话技能 要自定义小米AI通话的内容,需要先了解小米AI通话技能的概念。小米AI通话技能是…

    other 2023年6月25日
    00
  • Android NDK开发(C语言字符串)

    Android NDK开发(C语言字符串)攻略 什么是Android NDK Android NDK(Android Native Development Kit)是一个让开发者使用C或C++编写Android原生代码的工具集,它可用于为Android应用开发原生组件并将它们打包为APK,以提高应用程序的性能。 Android NDK开发环境 1.安装JDK…

    other 2023年6月20日
    00
  • ubuntu16.04搭建nfs服务的方法

    当我们需要在多个计算机之间共享文件时,nfs是一种非常有用的方式。NFS是Network File System的缩写,这是一个支持基于Unix的文件系统之间的文件共享协议。在Ubuntu中,我们可以使用NFS来共享文件,并使其他计算机能够访问我们的共享。下面是一份详细的教程,来演示如何在Ubuntu 16.04上安装和配置NFS服务。 安装NFS服务 首先…

    other 2023年6月27日
    00
  • Windows8无法设置静态IP地址出现不能修改的情况

    Windows 8无法设置静态IP地址出现不能修改的情况攻略 在Windows 8中,有时候会遇到无法设置静态IP地址的情况,即使尝试修改也无法生效。这可能是由于一些网络配置问题或权限限制导致的。下面是一些解决此问题的步骤和示例说明: 步骤1:检查网络适配器设置 打开“控制面板”并选择“网络和共享中心”。 在左侧导航栏中,点击“更改适配器设置”。 右键点击当…

    other 2023年7月30日
    00
  • vuelinui框架林间有风-慕课官方出品

    以下是“vuelinui框架林间有风-慕课官方出品”的完整攻略,包含两个示例说明: Vuelinui框架的基本概念 Vuelinui是一款基于Vue.js的UI框架,它提供了一系列的组件和工具,可以帮助开发者快速构建高质量的Web应用程序。Vuelinui框架的基本概念如下: 组件:Vuelinui框架提供了一系列的组件,包括按钮、表单、弹窗等,可以直接在项…

    other 2023年5月9日
    00
  • ats插件开发基础

    ATS插件开发基础 ATS(Apache Traffic Server)是一个高性能的开源反向代理和缓存服务器,支持HTTP、HTTPS、FTP等协议。ATS插件是一种扩展ATS功能的方式,可以通过插件实现自定义的HTTP处理逻辑、缓存策略、日志记录等功能。本文将提供一个完整的攻略,介绍ATS插件开发的基础知识,并提供两个示例说明。 ATS插件开发基础 AT…

    other 2023年5月8日
    00
  • jquery 弹出层注册页面等(asp.net后台)

    下面是关于“jquery 弹出层注册页面等(asp.net后台)”的完整攻略,过程中会有两个示例说明。 1. 引入jQuery库文件 在使用jQuery弹出层插件之前,我们需要先引入jQuery库文件。可以通过以下代码来引入: <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.m…

    other 2023年6月27日
    00
  • Android开发-之五大布局详解

    Android开发-之五大布局详解攻略 1. 线性布局(LinearLayout) 线性布局是Android开发中最常用的布局之一。它按照水平或垂直方向排列子视图。以下是一个示例: <LinearLayout android:layout_width=\"match_parent\" android:layout_height=\&…

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