js数组去重的常用方法总结

yizhihongxing

好,下面是关于“js数组去重的常用方法总结”的完整攻略。

js数组去重的常用方法总结

一、利用Set去重

ES6新增了Set容器,可以创建一个不重复的集合。因此,利用Set可以快速去重,代码如下:

const arr = [1, 2, 3, 3, 4, 5, 4];
const result = Array.from(new Set(arr));   // [1, 2, 3, 4, 5]

首先将数组转换成Set对象,然后再将Set对象转换成数组即可。这种方法简单易懂,但只适用于基本数据类型。如果需要去重的是复杂数据类型,需要注意Set中对象的比较方式是浅比较,因此可能会出现误判。

二、利用双重循环进行去重

双重循环的方式比较直观,代码如下:

const arr = [1, 2, 3, 3, 4, 5, 4];
const result = [];
for (let i = 0; i < arr.length; i++) {
  let isRepeat = false;
  for (let j = i + 1; j < arr.length; j++) {
    if (arr[i] === arr[j]) {
      isRepeat = true;
      break;
    }
  }
  if (!isRepeat) {
    result.push(arr[i]);
  }
}

套两层循环,每次比较相邻的两个元素,如果有重复的再通过标记位去除即可。这种方法虽然不需要额外的空间,但时间复杂度较高,不适用于大规模数据的去重。

三、利用indexOf进行去重

indexOf方法可以查找数组中指定元素的位置,如果没有找到返回-1。基于这个原理,可以通过一次循环来实现去重,代码如下:

const arr = [1, 2, 3, 3, 4, 5, 4];
const result = [];
for (let i = 0; i < arr.length; i++) {
  if (result.indexOf(arr[i]) === -1) {
    result.push(arr[i]);
  }
}

单层循环,每次将数组中的元素与result中的元素比较,如果result中没有则加入。这种方法相对于双重循环要快一些,但也不太适用于大规模数据的去重。

四、利用Map进行去重

Map对象是一种简单的键/值映射。利用这种映射关系,就可以实现数组去重。代码如下:

const arr = [1, 2, 3, 3, 4, 5, 4];
const map = new Map();
const result = [];
for (let i = 0; i < arr.length; i++) {
  if (!map.has(arr[i])) {
    map.set(arr[i], true);
    result.push(arr[i]);
  }
}

利用Map的方法,每次将数组中的元素存入Map中,重复元素会被覆盖。利用has方法可以判断Map中是否存在该元素,如果不存在则将其保存至result中,这样就可以完成去重了。这种方法相对来说不太快,但适用性较广,可以实现复杂数据类型的去重。

五、利用reduce方法进行去重

Reduce方法是JS数组原型中的一个函数,它可以快捷地对数组中的每个元素进行操作。代码如下:

const arr = [1, 2, 3, 3, 4, 5, 4];
const result = arr.reduce((acc, cur) => {
  if (!acc.includes(cur)) {
    acc.push(cur);
  }
  return acc;
}, []);

使用reduce可以快速地对数组中元素去重。acc为存储去重后的数组,每次遍历时判断是否重复,如果不重复则加入acc中。这种方法也比较适用于复杂数据类型的去重。

总结

本文总结了js数组去重的五种常用方法,包括利用Set、双重循环、indexOf、Map以及reduce,各有特点,适用于不同数据类型和规模的去重需求。

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

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • javascript输入CD-KEY自动分割的代码

    针对“javascript输入CD-KEY自动分割的代码”,我将分为以下几个方面进行详细讲解: 实现思路:解释实现这一功能的具体步骤和思路; 代码示例1:提供一个完整的javascript代码示例,体现如何实现CD-KEY的自动分割; 代码示例2:提供另外一个完整的javascript代码示例,体现如何根据自定义规则对CD-KEY进行分割。 实现思路:在实现…

    JavaScript 2023年6月11日
    00
  • javascript 中对象的继承〔转贴〕

    以下是javascript中对象的继承攻略: 1. 继承的概念 在Javascript中,可以通过继承的方式来实现代码的复用性。继承是一种以已有类(或对象)为基础,创建新类(或对象)的技术,新创建的类或对象具有已有类(或对象)的属性和行为。 2. 原型链继承 原型链继承是Javascript中最基础的继承方式,它的原理就是通过让一个构造函数的原型指向另一个构…

    JavaScript 2023年5月27日
    00
  • 前台js改变Session的值(用ajax实现)

    要实现“前台js改变Session的值(用ajax实现)”,我们需要通过以下步骤来实现: 在前台页面中引入jQuery库,因为我们将用它来实现ajax功能。可以使用以下代码实现引入: <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js&qu…

    JavaScript 2023年6月10日
    00
  • Android WebView使用方法详解 附js交互调用方法

    Android WebView使用方法详解 附js交互调用方法 一、Android WebView使用方法 WebView是Android提供的一个用于展示网页的组件。它支持HTML、CSS和JavaScript等Web标准,并可以与原生代码进行交互。 1.1 在XML布局文件中使用WebView 在布局文件中添加一个WebView控件: <WebVi…

    JavaScript 2023年6月11日
    00
  • Dreamweaver 网页制作的技巧

    Dreamweaver 网页制作的技巧 1. 使用样式表 使用样式表是网页制作中的一个重要技巧。可以提高网页代码的整洁性和可维护性。在 Dreamweaver 中,可以使用内部样式表或外部样式表。 内部样式表的用法 内部样式表写在 head 标签中的 style 标签内,用于指定该页面的样式。 示例代码: html <head> <styl…

    JavaScript 2023年6月11日
    00
  • javascript自定义日期比较函数用法示例

    一、什么是javascript自定义日期比较函数 在JavaScript中,可以通过定义自定义函数来实现日期的比较。自定义日期比较函数可以根据需求自定义比较方式,比如判断两个日期的大小、判断某个日期是否在指定的日期范围内等等。 二、javascript自定义日期比较函数实现方式 JavaScript中比较日期的方法有很多种,可以使用Date对象的方法进行比较…

    JavaScript 2023年5月28日
    00
  • JS防抖和节流实例解析

    JS防抖和节流实例解析 什么是防抖和节流? 在介绍防抖和节流实例前,我们先了解一下这两个概念。防抖和节流都是为了解决高频触发某个函数而导致资源占用过多的问题。 防抖:指触发事件后在n秒内函数只执行一次,如果n秒内再次触发事件,则会重新计算函数的执行时间。 节流:指连续触发事件但是在n秒内只执行一次函数,所以节流会稀释函数的执行频率。 防抖的例子 搜索框实时搜…

    JavaScript 2023年6月11日
    00
  • javascript内置对象arguments详解

    当我们在JavaScript函数中调用时,它会内置一个名为arguments的对象,包含了函数所需要的所有参数。这个对象被称为函数的“参数数组”,它实际上只是一个数组样式的对象。 arguments对象的基本用法 因为arguments是一个对象,你可以使用点操作符来访问它的属性。下面是一些常用的arguments属性: arguments.length 此…

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