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日

相关文章

  • 一文带你了解JavaScript垃圾回收机制

    一文带你了解 JavaScript 垃圾回收机制 JavaScript 垃圾回收(Garbage Collection, GC)机制是自动管理内存的过程,通过自动检测不再使用的内存,使其能够被释放并可以被其他对象使用。在本文中,我们将详细了解 JavaScript 垃圾回收机制的工作原理。 垃圾回收机制的分类 引用计数垃圾回收(Reference Count…

    JavaScript 2023年5月28日
    00
  • javascript面向对象之共享成员属性与方法及prototype关键字用法

    接下来我将为大家详细讲解“JavaScript面向对象之共享成员属性与方法及prototype关键字用法”的攻略。 共享成员属性与方法 在JavaScript中,我们可以通过定义类(class)的方式来实现面向对象编程。一个类代表了一类对象的行为和属性,但是有时候我们需要让多个对象共享一些属性或方法,这时候我们就可以使用共享成员属性与方法的方式。 共享成员属…

    JavaScript 2023年5月27日
    00
  • JavaScript实现时间范围效果

    实现时间范围效果可以帮助用户快速选择日期,常用于预定、筛选等场景。下面是实现时间范围效果的完整攻略,让我们逐步来实现。 第一步:引入依赖 我们需要引入一个 JavaScript 的日期选择器库。其中,moment.js 是一个自动解析、验证、操作和显示日期和时间的库,非常常用且功能强大。 <!– 引入moment.js和相关的CSS样式表文件 –&…

    JavaScript 2023年5月27日
    00
  • JavaScript访问字符串中单个字符的两种方法

    当我们需要从一个字符串中获取单个字符时,JavaScript提供了两种方法。 方法一:使用charAt()方法 charAt() 方法返回指定索引位置处的字符,索引从0开始计数。如果索引超出字符串长度,则返回一个空字符串。 let str = "Hello World!"; let char1 = str.charAt(0); // ch…

    JavaScript 2023年5月28日
    00
  • 微信小程序表单验证form提交错误提示效果

    下面将详细讲解“微信小程序表单验证form提交错误提示效果”的完整攻略。 什么是微信小程序表单验证 表单验证是网站开发中的重要一环,目的是为了让用户在填写表单时能够及时的发现并纠正错误,保证数据的准确性。同样,微信小程序中也需要进行表单验证。 微信小程序表单验证的原理与网站表单验证类似,即使用户在填写表单时有错误输入,也应该及时给予提示,防止用户在数据提交时…

    JavaScript 2023年6月10日
    00
  • 深入学习JavaScript 高阶函数

    完整攻略:深入学习JavaScript高阶函数 什么是高阶函数? 在JavaScript中,函数是一等公民。其意味着我们可以将函数分配给变量、将函数作为参数传递给其他函数以及从函数中返回函数。 函数能够接收一个或多个函数作为参数并将函数返回作为其结果的函数称为“高阶函数”。 为什么我们需要高阶函数? 高阶函数提供了一个强大的工具来处理同类型的原始值和对象。 …

    JavaScript 2023年6月10日
    00
  • js日期相关函数总结分享

    JS日期相关函数总结分享 简介 日期在前端开发中非常常见,JavaScript原生提供了许多日期相关的函数,本文将会总结下这些相关函数。 获取Date对象 获取Date对象可以使用以下几个方式: new Date() 使用new Date()方式获取Date对象,可以获取当前日期时间。 const now = new Date(); // 获取当前日期 co…

    JavaScript 2023年5月27日
    00
  • vue页面锁屏的完美解决方法记录

    Vue页面锁屏的完美解决方法记录 在Vue项目中,有时候需要在某些页面或某些操作时锁屏,防止用户在数据处理过程中造成不必要的错误。下面是Vue页面锁屏的完美解决方法记录。 方案介绍 该方案使用了Vue官方推荐的vue-loading-overlay插件实现锁屏。该插件提供了一种可定制的加载遮罩层,同时支持全局和组件内部使用。 实现步骤 第一步:安装插件 使用…

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