JavaScript数组去重的几种方法

JavaScript中的数组去重是一个比较常用的操作,本文将介绍几种常用的JavaScript数组去重方法,包括传统for循环、ES6 Set、Array.filter()、Array.reduce()和ES6 Map。

传统for循环

最常见的去重方法就是使用传统的for循环,基本思路是:遍历数组,将每一个元素与数组的其它元素进行比较,如果有重复的就将其删除。

function unique(arr) {
  var result = [];
  for (var i = 0, len = arr.length; i < len; i++) {
    if (result.indexOf(arr[i]) === -1) {
      result.push(arr[i]);
    }
  }
  return result;
}

var arr = [1, 2, 3, 2, 1];
console.log(unique(arr)); //[1, 2, 3]

上述代码中,我们定义了一个unique()函数,来实现数组去重的功能。首先,我们定义了一个result数组,用来保存去重后的结果。接着,我们使用for循环来遍历原数组arr,通过result.indexOf(arr[i])来判断当前元素arr[i]是否在result数组中存在,如果不存在则将其添加到result数组中。最后,返回result数组即可。

ES6 Set

ES6中新增了Set数据类型,可以用来存储一些具有独特性质的数据。Set数据类型自动去重,可以用来实现数组去重。

function unique(arr) {
  return Array.from(new Set(arr));
}

var arr = [1, 2, 3, 2, 1];
console.log(unique(arr)); //[1, 2, 3]

上述代码中,我们使用了Set和Array.from()方法来实现数组去重。首先,我们将原数组arr传入Set方法中,得到一个去重后的Set数据类型。接着,我们使用Array.from()方法将Set类型转为数组类型。最后,返回数组即可。

Array.filter()

使用Array.filter()方法可以筛选出一个新的数组,根据新数组的长度是否等于原数组长度,可以判断原数组中是否有重复元素。

function unique(arr) {
  return arr.filter(function(item, index, array) {
    return array.indexOf(item) === index;
  });
}

var arr = [1, 2, 3, 2, 1];
console.log(unique(arr)); //[1, 2, 3]

上述代码中,我们使用了Array.filter()方法来实现数组去重。filter()方法将数组中的每一个元素都传入回调函数中,item为当前元素,index为当前元素的下标,array为原始数组。我们使用array.indexOf(item) === index来判断当前元素在数组中是否是第一个出现的位置,如果是则保留,否则删除。最后返回筛选出的新数组即可。

Array.reduce()

使用Array.reduce()方法也可以实现数组去重,思路类似于for循环。

function unique(arr) {
  return arr.reduce(function(prev, curr) {
    if (prev.indexOf(curr) === -1) {
      prev.push(curr);
    }
    return prev;
  }, []);
}

var arr = [1, 2, 3, 2, 1];
console.log(unique(arr)); //[1, 2, 3]

上述代码中,我们使用了Array.reduce()方法来实现数组去重。reduce()方法将数组中的每一个元素都传入回调函数中,prev为上一次回调函数的返回值,curr为当前元素。我们使用if语句来判断当前元素是否在prev数组中存在,如果不存在则将其添加到prev数组中。最后返回prev数组即可。

ES6 Map

ES6中的Map数据类型也可以实现数组去重。使用Map数据类型时,我们可以将数组中的每一个元素作为key存入Map,value设置为1,然后取出Map中的keys即可得到去重后的数组。

function unique(arr) {
  var map = new Map();
  var result = [];
  for (var i = 0, len = arr.length; i < len; i++) {
    if (!map.has(arr[i])) {
      map.set(arr[i], 1);
      result.push(arr[i]);
    }
  }
  return result;
}

var arr = [1, 2, 3, 2, 1];
console.log(unique(arr)); //[1, 2, 3]

上述代码中,我们使用了Map数据类型来实现数组去重。我们首先定义了一个空的Map类型,用来保存去重后的结果。接着,我们使用for循环遍历原始数组arr,使用if语句判断当前元素是否在Map中存在。如果Map中不存在该元素,则将该元素作为key存入Map,value为1;同时将该元素添加到result数组中。最后返回result数组即可。

以上是我分享的几种JavaScript数组去重的方法,你阅读之后对数组去重应该有更全面的了解了。

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

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

相关文章

  • js预载入和JavaScript Image()对象使用介绍

    让我详细给您讲解“js预载入和JavaScript Image()对象使用介绍”的完整攻略。 什么是js预载入 当一个web页面中有大量的图片、音频等素材需要加载时,页面加载速度会明显减慢,给用户带来不好的体验。而js预载入能够做到在页面需要使用某个资源的时候提前加载资源,这样能够极大的提升用户页面加载体验。如何实现呢?下面我来介绍一下实现的具体步骤: 首先…

    JavaScript 2023年5月27日
    00
  • Android应用开发之代码混淆

    Android 应用开发之代码混淆 1.代码混淆的作用 代码混淆可以将原有 Java 代码反编译成的暴露的对应 Java 原代码格式的 Java 文件进行二次加密,改变其结构,提高代码保密性和防止逆向破解的能力。 在 Android 应用开发中,只编写 Java 代码是不够的。Android 应用也会包含 XML 、资源文件、native 库和其他二进制文件…

    JavaScript 2023年6月10日
    00
  • JS实用的动画弹出层效果实例

    JS实用的动画弹出层效果实例是一种常见的网页制作效果,它能够为网站增添一些动态效果,提高用户体验。在本篇攻略中,我将为大家详细讲解如何使用JavaScript实现这种动画弹出层效果。 准备工作 在开始制作之前,我们需要准备以下的工作: 在HTML文件中,引入JavaScript代码文件。 <script src="popup.js"…

    JavaScript 2023年6月10日
    00
  • js判断两个日期是否相等的方法

    JS判断两个日期是否相等的方法有多种实现方式,下面将分别介绍两种常用的方法: 方法一:将日期转为时间戳比较 将两个日期对象转化为时间戳(即毫秒数)后进行比较。 function compareDate(date1, date2) { return date1.getTime() === date2.getTime(); } 上述代码中,getTime() 方…

    JavaScript 2023年5月27日
    00
  • JS中sort函数排序用法实例分析

    下面是JS中sort函数排序用法实例分析的详细攻略。 什么是sort函数排序? sort()是JavaScript数组的一个方法,用于对数组元素进行排序。 sort()方法不创建新数组,而是直接修改原始数组的顺序。 sort()方法默认按字母顺序排序,如果是数字需要先将其转为字符串。 sort()方法可以接受一个函数作为参数,该函数指定排序规则。 sort函…

    JavaScript 2023年5月28日
    00
  • Javascript 实现计算器时间功能详解及实例(二)

    针对“Javascript 实现计算器时间功能详解及实例(二)”这篇文章,我来为你详细讲解一下完整攻略。 一、背景介绍 该文章主要讲解了如何使用 JavaScript 实现一个计算器,其中包括基本的加减乘除运算以及计算时间的功能。 二、实现方法 该计算器代码的主要实现方法就是使用了 JavaScript 的 eval() 方法,将输入的表达式进行计算,并输出…

    JavaScript 2023年5月27日
    00
  • json格式的时间显示为正常年月日的方法

    为了让JSON格式的时间显示为正常的年月日,我们可以使用JavaScript内置的Date对象和其中的一些方法。下面是具体的攻略: 首先,我们需要获取JSON格式的时间,并将其转化为JavaScript的Date对象。假设我们的JSON格式时间为2022-05-12T10:30:00Z,则可以使用以下代码将其转化为Date对象: javascript con…

    JavaScript 2023年6月10日
    00
  • js正则表达式中的单行模式与多行模式实例分析

    下面是一个详细讲解“js正则表达式中的单行模式与多行模式实例分析”的完整攻略: 概述 正则表达式是匹配字符串的强有力的工具,它可以方便的实现各种复杂的匹配需求。而其中的单行模式与多行模式也是正则表达式中非常重要的一部分,能够帮助我们更快捷地进行字符串匹配操作。 在 JavaScript 中,我们可以使用以下方式开启单行模式和多行模式: 单行模式:使用 /s …

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