JavaScript数组去重的几种方法

yizhihongxing

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日

相关文章

  • Vue Element前端应用开发之开发环境的准备工作

    下面是“Vue Element前端应用开发之开发环境的准备工作”的完整攻略。 准备工作 在开始Vue Element前端应用开发之前,我们需要做一些准备工作。这些准备工作包括: 安装Node.js和npm 安装Vue CLI 创建项目 下面我们来详细介绍这些准备工作。 安装Node.js和npm Node.js是一个JavaScript的运行环境,它能帮我们…

    JavaScript 2023年6月10日
    00
  • js日期插件dateHelp获取本月、三个月、今年的日期

    要获取本月、三个月、今年的日期,可以使用JS日期插件dateHelp。下面是使用dateHelp的完整攻略: 步骤一:引入dateHelp插件 在HTML文件中,引入dateHelp.js。 <script src="path/to/dateHelp.js"></script> 步骤二:获取本月日期 要获取本月日期…

    JavaScript 2023年6月10日
    00
  • javascript求日期差的方法

    当我们需要计算两个日期之间的差值时,可以使用JavaScript中内置的方法来帮助我们进行计算。下面是一些常用函数的示例说明。 方法1:使用getTime()方法求日期差 使用new Date()创建两个日期对象 通过调用getTime()方法获取两个日期对象的时间戳 用两个时间戳相减得到日期差 示例代码如下: let date1 = new Date(‘2…

    JavaScript 2023年5月27日
    00
  • JavaScript的漂亮的代码片段

    JavaScript的漂亮的代码片段是指在保证实现功能的前提下,代码的可读性、易扩展性等方面都表现出色的代码段。以下是编写漂亮的JavaScript代码片段的一些攻略: 细分代码段 为了提高可读性和可维护性,代码通常需要将不同的任务分成不同的部分。这些部分通常是单独的函数或方法。函数的任务应该足够小,不超过几十行,这样就可以更好地组织代码。有了这个设计,我们…

    JavaScript 2023年6月10日
    00
  • 理解javascript函数式编程中的闭包(closure)

    理解 javascript 函数式编程中的闭包(closure)可以分为以下几个步骤: 什么是闭包? 闭包是指一个函数访问了自己定义的外部函数的作用域中的变量。简单来说,就是在一个函数内部可以访问另一个函数作用域中的变量。在 JavaScript 中,当一个函数定义在另一个函数内部时,就会形成一个闭包。 闭包的使用 保存私有变量 闭包可以用来定义私有变量。这…

    JavaScript 2023年6月10日
    00
  • Javascript获取表单名称(name)的方法

    可以通过以下两种方法获取表单名称(name): 方法一:使用document.forms对象 可以通过document.forms对象来获取一个页面上的表单列表。这个对象有一个length属性,代表页面上所有表单的数量。而每个表单对象又有一个name属性,代表表单名称。 示例代码: // 获取第一个表单的名称 var formName = document.…

    JavaScript 2023年6月10日
    00
  • html嵌入javascript代码的三种方式

    HTML嵌入JavaScript代码通常有三种方式:内联(Inline)、内部(Internal)、外部(External)。 Inline(内联) 内联是将JavaScript代码直接写在HTML元素的属性中。由于代码与HTML元素混合在一起,这种方式不易维护和阅读,推荐在特定环境下使用。 以下是内联的示例: <button onclick=&quo…

    JavaScript 2023年5月18日
    00
  • 一文搞懂JavaScript中的内存泄露

    下面是详细讲解“一文搞懂JavaScript中的内存泄露”的完整攻略: 1. 什么是内存泄漏 内存泄漏指的是程序中使用的内存不会被垃圾回收器(Garbage Collector)自动释放,导致内存占用过多,程序变得越来越慢。JavaScript中出现内存泄露的原因主要是因为使用了不当的变量定义或数据结构,或者是不恰当地使用了闭包或事件监听等机制。 2. 如何…

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