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正则表达式中test,exec,match方法的区别说明

    JS正则表达式是一种用于匹配字符串模式的工具,包括test、exec和match等方法可以用于匹配模式并返回匹配结果。这三种方法的用途和返回结果略有不同。我们来详细讲解一下这三种方法的区别说明。 1. test方法 test() 是正则表达式对象的一个方法,用于检测一个字符串是否匹配某个正则表达式。其返回值是一个布尔值,如果匹配成功返回 true,否则返回 …

    JavaScript 2023年6月10日
    00
  • js浮动图片的动态效果

    下面是 “js浮动图片的动态效果” 的完整攻略。 概述 在网页设计中,为了提升页面的动态感和美观性,我们经常需要使用一些图片动态效果。其中,浮动图片效果是一种比较常见的效果,通过改变图片的位置和透明度来产生动态感,这种效果可以让页面更加生动、炫酷。 本攻略将教你如何通过JavaScript与CSS实现浮动图片效果,具体实现方法将在下面的步骤中介绍。 实现步骤…

    JavaScript 2023年6月11日
    00
  • Sublime快捷键与常用插件配置总结

    Sublime快捷键与常用插件配置总结 Sublime Text是一款非常流行的文本编辑器,它的快捷键和插件都非常丰富,可以大大提高我们的编辑效率。本文将为大家详细介绍Sublime Text的常用快捷键和插件的配置方法。 常用快捷键 以下是Sublime Text的常用快捷键: 基本编辑 Ctrl + C:复制 Ctrl + X:剪切 Ctrl + V:粘…

    JavaScript 2023年5月19日
    00
  • Javascript作用域和作用域链原理解析

    Javascript作用域和作用域链是Javascript中重要的概念,理解它们可以帮助我们更好地编写代码和处理变量与函数之间的关系。 什么是Javascript作用域 Javascript作用域是指变量和函数的可访问范围。在Javascript中,有三种作用域: 全局作用域 函数作用域 块级作用域(ES6新增) 全局作用域中定义的变量和函数可以在整个应用程…

    JavaScript 2023年6月10日
    00
  • JS两种类型的表单提交方法实例分析

    下面是关于“JS两种类型的表单提交方法实例分析”的完整攻略: JS两种类型的表单提交方法实例分析 提交表单的两种方式 在JS中,可以使用两种不同的方式来提交表单:普通表单提交和Ajax表单提交。 普通表单提交 普通表单是指通过浏览器的提交按钮或通过JS代码完成表单的提交。当我们使用表单提交时,表单会重新加载页面并传递表单数据到服务器。普通表单提交方法很简单,…

    JavaScript 2023年6月10日
    00
  • 浅析javascript的return语句

    浅析JavaScript的return语句,我们可以从以下几个方面进行阐述: 1. return的作用 在函数内,return关键字的作用是“终止函数执行并返回一个值”。也就是说,当函数执行到return语句时,会立即退出函数并返回一个值,如果没有指定返回值,则返回undefined。 2. return的使用方式 在JavaScript中,return的使…

    JavaScript 2023年6月10日
    00
  • JavaScript中的稀疏数组与密集数组[译]

    JavaScript中的数组可以是密集的,也可以是稀疏的。密集数组即为连续的数组元素,稀疏数组表示有些元素被省略了。本文将详细讲解JavaScript中稀疏数组和密集数组的概念和行为。 什么是稀疏数组? 稀疏数组是指数组元素具有不连续性,或者说中间有空洞的数组。在稀疏数组中,一些元素是不存在的,我们可以用下标访问到的元素即表示存在的,没法访问到的元素则被视为…

    JavaScript 2023年5月27日
    00
  • 作为程序员必须了解的缩写和专业名词

    作为程序员必须了解的缩写和专业名词 作为一名程序员,掌握一些缩写和专业术语是非常重要的,可以帮助我们更快速地理解代码和文档,也能够更好地和同行进行沟通交流。下面是一些必须了解的缩写和专业名词: 常见缩写 API API是Application Programming Interface的缩写, 指的是应用程序编程接口,是一组定义、规范了应用程序中数据和功能的…

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