JS数组去重的六种方法

去重数组的利器——JavaScript中的ES6数组去重方法 ES6中引入了Set数据结构,它类似于数组,但是成员的值都是唯一的,没有重复的值。利用这个特性,我们可以将数组转换为Set,然后再将Set转换回数组,实现数组的去重。方法可以根据指定的条件筛选数组中的元素,并返回一个新的数组。利用这个特性,我们可以通过遍历数组,将重复的元素过滤掉,从而实现数组的去重。上述代码中,我们先将数组转换为Set数据结构,然后再通过扩展运算符将Set转回数组,得到去重后的数组。方法可以根据指定的条件筛选数组中的元素,并返回一个新的数组。我们可以利用这个特性来实现数组的去重。 阅读详情
一、利用ES6 Set去重(ES6中最常用)

方法:

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

示例:

var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
console.log(unique(arr))
 //[1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {}, {}]

不考虑兼容性,这种去重的方法代码最少。这种方法还无法去掉“{}”空对象,后面的高阶方法会添加去掉重复“{}”的方法。

二、利用for嵌套for,然后splice去重(ES5中最常用)
function unique(arr){            
        for(var i=0; i<arr.length; i++){
            for(var j=i+1; j<arr.length; j++){
                if(arr[i]==arr[j]){         //第一个等同于第二个,splice方法删除第二个
                    arr.splice(j,1);
                    j--;
                }
            }
        }
return arr;
}

示例:

var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
    console.log(unique(arr))
    //[1, "true", 15, false, undefined, NaN, NaN, "NaN", "a", {…}, {…}]     //NaN和{}没有去重,两个null直接消失了

双层循环,外层循环元素,内层循环时比较值。值相同时,则删去这个值。

三、利用indexOf去重
function unique(arr) {
    if (!Array.isArray(arr)) {
        console.log('type error!')
        return
    }
    var array = [];
    for (var i = 0; i < arr.length; i++) {
        if (array .indexOf(arr[i]) === -1) {
            array .push(arr[i])
        }
    }
    return array;
}

示例:

var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
console.log(unique(arr))
   // [1, "true", true, 15, false, undefined, null, NaN, NaN, "NaN", 0, "a", {…}, {…}]  //NaN、{}没有去重

新建一个空的结果数组,for 循环原数组,判断结果数组是否存在当前元素,如果有相同的值则跳过,不相同则push进数组。

四、利用sort()
function unique(arr) {
    if (!Array.isArray(arr)) {
        console.log('type error!')
        return;
    }
    arr = arr.sort()
    var arrry= [arr[0]];
    for (var i = 1; i < arr.length; i++) {
        if (arr[i] !== arr[i-1]) {
            arrry.push(arr[i]);
        }
    }
    return arrry;
}

示例:

     var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
        console.log(unique(arr))
// [0, 1, 15, "NaN", NaN, NaN, {…}, {…}, "a", false, null, true, "true", undefined]      //NaN、{}没有去重

利用sort()排序方法,然后根据排序后的结果进行遍历及相邻元素比对。

五、利用递归去重
function unique(arr) {
        var array= arr;
        var len = array.length;

    array.sort(function(a,b){   //排序后更加方便去重
        return a - b;
    })

    function loop(index){
        if(index >= 1){
            if(array[index] === array[index-1]){
                array.splice(index,1);
            }
            loop(index - 1);    //递归loop,然后数组去重
        }
    }
    loop(len-1);
    return array;
}

示例:

 var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
console.log(unique(arr))
//[1, "a", "true", true, 15, false, 1, {…}, null, NaN, NaN, "NaN", 0, "a", {…}, undefined]
六、利用Map数据结构去重
function arrayNonRepeatfy(arr) {
  let map = new Map();
  let array = new Array();  // 数组用于返回结果
  for (let i = 0; i < arr.length; i++) {
    if(map .has(arr[i])) {  // 如果有该key值
      map .set(arr[i], true); 
    } else { 
      map .set(arr[i], false);   // 如果没有该key值
      array .push(arr[i]);
    }
  } 
  return array ;
}

示例:

 var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
    console.log(unique(arr))
//[1, "a", "true", true, 15, false, 1, {…}, null, NaN, NaN, "NaN", 0, "a", {…}, undefined]
ES6 数组去重的方法 无论是使用 Set 数据结构、Array.prototype.filter() 函数,还是结合使用 Array.from() 和 Set 数据结构,都可以轻松地去除数组中的重复元素。在处理数组时,有时候我们需要去除其中的重复元素,以便得到唯一的值。ES6 提供了几种方法来实现数组去重,下面我们将详细介绍这些方法,并提供相应的源代码。通过将数组转换为 Set,然后再将 Set 转换回数组,就可以实现数组去重。然后,我们使用 Set 对象将数组转换为 Set。函数创建一个新数组,其中只包含原数组中的唯一元素。 阅读详情

相关推荐

Sparse4Dv3 代码复现

打包数据集的元信息和标签,并生成所需的.pkl文件。最后还输出了很多跟踪相关的东西...然后通过K-means生成锚点。编译可变形聚合CUDA算子。安装motmetrics。

m0_60857098的博客 4487

ES6:数组去重的方法

Set 是 ES6 引入的一种数据结构,其中的元素是唯一的,不允许重复。可以通过将数组转换为Set,然后再将 Set 转换回数组来实现去重。将数组转换为 Set,然后再将 Set 转换回数组来实现去重。利用 filter() 方法遍历数组,筛选出不重复的元素。遍历数组,将不重复的元素添加到累积的结果数组中。:因为该结构中的元素是唯一的,不允许重复。使用 reduce() 方法遍历数组,将不重复的元素添加到累积的结果数组中。遍历数组,筛选出不重复的元素。排序,然后用一个指针从第。

小草莓的博客 7774

不用SE63逐个翻译!ABAP函数LXE_OBJ_TEXT_PAIR_WRITE批量处理TCODE描述的3种姿势

本文介绍了三种利用ABAP函数LXE_OBJ_TEXT_PAIR_WRITE批量翻译SAP事务码(TCODE)描述的高效方案,旨在替代SE63逐个翻译的低效操作。内容涵盖从基础循环、Excel导入到全自动程序集成的实现方法,帮助开发者显著提升批量翻译效率,并深入解析了SAP翻译体系的核心原理与实战技巧。

weixin_42593130的博客 660

es6去除重复项_ES6中如何删除数组中的重复项

ES6中,如何删除一个数组中的重复数据呢,以下是我总结的,从数组中过滤掉重复项并且返回唯一值的三种方法。我最喜欢的是使用Set因为它是最简单和最简单的????const array = ['????',1, 2,'????','????', 3]// 1: 'Set'[... new Set(array)]// 2: 'Filter'array.filter((item, index) => array.index...

weixin_29945371的博客 9717

时间同步中 TOD 与GPRMC和IRIG-B的区别

时间同步中 TOD 与GPRMC和IRIG-B的区别

ftdlk的博客 1726

MOSFET关断尖峰电压的机理与抑制

MOSFET在电力电子系统中存在开关尖峰电压/电流问题,主要源于寄生电感、密勒电容及开关瞬态特性。尖峰会引发过压击穿、功率损耗和EMI干扰。抑制措施包括优化驱动电路、添加缓冲网络(RC/RCD)、降低寄生电感(改进PCB布线/封装)、使用快速二极管及远端负载特殊处理(电抗器/滤波器)。系统性的器件选型与电路设计是确保功率电子稳定运行的关键。

硬核科技 1824

ES6数组去重的三个简单办法

ES6数组去重的三个简单办法 简单说一下利用ES6实现数组去重的三个办法。 第一种: 利用Map对象和数组的filter方法 贴上相关代码 打印后的结果 通过打印我们发现,确实实现了我们想要的效果。那么下面简单来解释一下。 1.Map对象是ES6提供的一个新的数据结构,其中has的办法是返回一个布尔值,表示某个值是否存在当前的Mp对象之中,set的办法是给Map对象设置key/value。 2...

weixin_44526618的博客 8万+

2024年Unity 面试题 |五萬字 二佰道| Unity面试题大全,面试题总结【全网最全,收藏一篇足够面试】

正所谓 金三银四 ,又到了找工作的大好时机了,不知道大家有没有意向找一份更好的工作呢~ 之前写了很多Unity的学习和实例文章,但是面试题部分还没有一个系统的整理。 那本篇文章就来整理一下Unity中一些常见的面试题,说不准就会面试的时候就会遇到! 本篇文章会将Unity所有方面的面试资料都融会贯通,绝对是2022年Unity面试领域最实用的文章啦!

努力前行,总会成为自己心中的那道光 17万+

六种方法实现JavaScript数组去重

JavaScript数组去重问题是面试(或笔试)中可能被问到的题 如果只能说出一两种方法的话,就显得我们很low 所以这里我总结了数组去重的六种方法供大家参考直接遍历首先先来一种简单粗暴的方法 也是很容易就可以想到的办法 声明一个新数组 直接遍历

尐轩web前端网络日志 8842

水与光的奇妙“切割之舞”:水导激光切割技术探秘

水导激光切割技术的诞生,是材料加工领域不断追求高精度、高质量加工的成果。传统激光切割技术在加工过程中,材料会因瞬间高温而产生热变形、热影响区大以及切割面粗糙等问题,这些弊端在对一些高精度、热敏性材料的加工中尤为突出 ,迫切需要一种新的技术来克服这些难题。水导激光切割技术的起源可以追溯到 20 世纪 80 年代。1986 年,德国公司 Aesculap-Werke AG 首次提出了将水流引入激光切割过程的创新想法,并制造出首代水导激光设备。不过,当时的技术尚处于雏形阶段,仅仅是在光纤出口添加了一小柱水流,激光

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 1673

RK3568平台(电源篇)电源域IO配置

在kernel之前需要修改电源域,主控电源域的IO电平要与对接外设芯片的IO电平匹配,还要注意软件的电压配置要跟硬件的电压一致,否则,最坏的情况可能会导致IO的损坏。其实就是管理 IO 输出的电平;假如硬件上 IO 电源域配置为 3.3V,则 IO 输出最大电平为 3.3V;同理 IO 电源域硬件配置为 1.8V,则 IO 输出最大电平是 1.8V;这样有利于 IO 电平的灵活配置;

weixin_49303682的博客 3478

js数组去重的六种方法

用于查找数组元素,找到了返回元素下标,找不到返回-1,因此我们可以定义一个新的空数组用来存放数组去重后的值,然后利用indexOf()判断数组元素的值是否存在新数组中,如果不存在,则将它添加到新数组中;如果存在,说明是重复的值,不需要理会。思路:filter方法对数组元素进行筛选,找出符合条件的数组元素,并返回一个新数组。方法也是用来查找数组元素的,找到了返回true,没找到返回false,因此思路也是和第二种一样的。思路:将数组元素两两进行比较,如果相等,则删除其中一个,并修正数组下标。...

叶子yes的博客 1071

网络安全 | 企业网络安全的十大挑战及解决方案

网络安全 | 企业网络安全的十大挑战及解决方案,随着信息技术的飞速发展,企业数字化转型进程不断加速,网络安全问题日益成为企业运营与发展面临的关键挑战。本文深入剖析企业网络安全的十大挑战,包括网络攻击日益复杂、数据泄露风险、内部威胁、物联网安全、云安全、合规性要求、移动办公安全、供应链安全、人才短缺以及安全预算有限等,并针对每个挑战详细阐述相应的解决方案,旨在为企业构建全面、有效的网络安全体系提供指导与参考,助力企业在复杂多变的网络环境中保障自身信息资产安全,实现可持续发展。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 4万+

JS实现数组去重方法六种方法

// 方法一: // 双层循环,外层循环元素,内层循环时比较值 // 如果有相同的值则跳过,不相同则push进数组 Array.prototype.distinct = function(){ var arr = this, result = [], i, j, len = arr.length; f...

链珠的博客 538

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

js实现数组去重的六种方法

方法一 使用数组的indexof方法,如果element的index不相等则说明element相同,则过滤掉 Array.prototype.distinct1 = function () { return this.filter(function (element, index, self) { return self.indexOf(element) === index; }); } 方法二 ES6提供了数据结构Set。类似于数组,但是没有重复值。可以利用Set数据结构

ShinDebonair 1247

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

前端:JS实现数组去重常用的六种方法介绍

今天给大家分享JS实现数组去重常用的六种方法,希望对大家能有所帮助!定义变量let arr = [20,6,13,20,100,8,13,11]; let newArr = []; 1、...

IT技术分享社区 717

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

js最简单数组去重_JS实现数组去重方法总结(六种方法)

方法一:双层循环,外层循环元素,内层循环时比较值如果有相同的值则跳过,不相同则push进数组Array.prototype.distinct = function(){var arr = this,result = [],i,j,len = arr.length;for(i = 0; i < len; i++){for(j = i + 1; j < len; j++){if(arr[i...

weixin_30262217的博客 487

JS实现数组去重方法总结(六种方法)

JS实现数组去重方法总结 方法一: 双层循环,外层循环元素,内层循环时比较值 如果有相同的值则跳过,不相同则push进数组 方法二:利用splice直接在原数组进行操作 双层循环,外层循环元素,内层循环时比较值 值相同时,则删去这个值 注意点:删除元素之后,需要将数组的长度也减1. 优点:简单易懂 缺点:占用内存高,速度慢 方法三:利用对象的属性不能相同的特点进行去重 方法四:数组递归去重 运用递归的思想 先排序,然后从最后开始比较,遇到相同,则删除 ..

XiaoXiao2223的博客 2579

数组去重,不止一种姿势:JavaScript的六种高效方法,你知道几种?

最近几天,在捣鼓一个小型项目时,遇到了一个关于数组去重的问题。在这个项目中,我需要从一个包含大量数据的数组中去除重复项。因为前端页面,这里使用JavaScript的数组方法来处理这个任务,但发现有多种不同的去重方法,例如使用Set对象或filter方法。这种情况下,我该如何选择一种高效的数组去重方法来优化性能呢?

Yong.Sunshine 1203

JavaScript数组去重六种方法

var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5]; //方法一,循环遍历,第i项与后面所有的项对比,有重复则删除 function removeDuplicatedItem(arr) { for(var i = 0; i &lt; arr.length-1; i++){ for(var j = i+1; j &lt; arr.length; j++){ ...

yanzi920324的博客 244

六种方法实现数组去重(JavaScript版)

六种方法实现数组去重

Grand.的博客 324

js数组去重六种方法

第一种:遍历数组法 这种方法最简单最直观,也最容易理解,代码如下: var arr = [2, 8, 5, 0, 5, 2, 6, 7, 2] var newArr = [] for (var i = 0; i < arr.length; i++) { if (newArr.indexOf(arr[i]) === -1) { newArr.push(arr[i]...

你如今的气质里,藏着你走过的路,经历过的事,读过的书,和爱过的人。 257
上一篇: HTML输入框---数字/中文/字母/组合
下一篇: jq 下拉框结合tab切换
「已注销」
博客等级 码龄7年 4粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值