js数组去重的6种方法

javaScript对象数组去重(十种方法实现!)【算法】 数组去重的方法(十种方法) 一、利用ES6 Set去重(ES6中最常用) 代码: let arr = [1,1,'数组','数组',false,false,undefined,undefined,null,null,NaN,NaN,{},{},[],[]] function unique(arr){ return Array.from(new Set(arr)) } console.log(un... 阅读详情

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


方法一:

双层循环,外层循环元素,内层循环时比较值

如果有相同的值则跳过,不相同则push进数组

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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] === arr[j]){
     j = ++i;
    }
   }
   result.push(arr[i]);
  }
  return result;
}
var arra = [1,2,3,4,4,1,1,2,1,1,1];
arra.distinct();    //返回[3,4,2,1]

方法二:利用splice直接在原数组进行操作

双层循环,外层循环元素,内层循环时比较值

值相同时,则删去这个值

注意点:删除元素之后,需要将数组的长度也减1.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Array.prototype.distinct = function (){
  var arr = this ,
   i,
   j,
   len = arr.length;
  for (i = 0; i < len; i++){
   for (j = i + 1; j < len; j++){
    if (arr[i] == arr[j]){
     arr.splice(j,1);
     len--;
     j--;
    }
   }
  }
  return arr;
};
var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,];
var b = a.distinct();
console.log(b.toString()); //1,2,3,4,5,6,56

优点:简单易懂

缺点:占用内存高,速度慢

方法三:利用对象的属性不能相同的特点进行去重

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Array.prototype.distinct = function (){
  var arr = this ,
   i,
   obj = {},
   result = [],
   len = arr.length;
  for (i = 0; i< arr.length; i++){
   if (!obj[arr[i]]){ //如果能查找到,证明数组元素重复了
    obj[arr[i]] = 1;
    result.push(arr[i]);
   }
  }
  return result;
};
var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,];
var b = a.distinct();
console.log(b.toString()); //1,2,3,4,5,6,56

方法四:数组递归去重

运用递归的思想

先排序,然后从最后开始比较,遇到相同,则删除

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Array.prototype.distinct = function (){
  var arr = this ,
   len = arr.length;
  arr.sort( function (a,b){  //对数组进行排序才能方便比较
   return a - b;
  })
  function loop(index){
   if (index >= 1){
    if (arr[index] === arr[index-1]){
     arr.splice(index,1);
    }
    loop(index - 1); //递归loop函数进行去重
   }
  }
  loop(len-1);
  return arr;
};
var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,56,45,56];
var b = a.distinct();
console.log(b.toString());  //1,2,3,4,5,6,45,56

方法五:利用indexOf以及forEach

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Array.prototype.distinct = function (){
  var arr = this ,
   result = [],
   len = arr.length;
  arr.forEach( function (v, i ,arr){  //这里利用map,filter方法也可以实现
   var bool = arr.indexOf(v,i+1);  //从传入参数的下一个索引值开始寻找是否存在重复
   if (bool === -1){
    result.push(v);
   }
  })
  return result;
};
var a = [1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,2,2,1,23,1,23,2,3,2,3,2,3];
var b = a.distinct();
console.log(b.toString()); //1,23,2,3

方法六:利用ES6的set

Set数据结构,它类似于数组,其成员的值都是唯一的。

利用Array.from将Set结构转换成数组

?
1
2
3
4
function dedupe(array){
  return Array.from( new Set(array));
}
dedupe([1,1,2,3]) //[1,2,3]

拓展运算符(...)内部使用for...of循环

?
1
2
3
let arr = [1,2,3,3];
let resultarr = [... new Set(arr)];
console.log(resultarr); //[1,2,3]

下面给大家补充介绍合并数组并去重的方法

一、concat()方法

思路:concat() 方法将传入的数组或非数组值与原数组合并,组成一个新的数组并返回。该方法会产生一个新的数组。

?
1
2
3
4
5
function concatArr(arr1, arr2){
   var arr = arr1.concat(arr2);
   arr = unique1(arr); //再引用上面的任意一个去重方法
   return arr;
}

二、Array.prototype.push.apply()

思路:该方法优点是不会产生一个新的数组。

?
1
2
3
4
5
6
7
8
9
10
var a = [1, 2, 3];
var b = [4, 5, 6];
Array.prototype.push.apply(a, b); //a=[1,2,3,4,5,6]
//等效于:a.push.apply(a, b);
//也等效于[].push.apply(a, b);
function concatArray(arr1,arr2){
   Array.prototype.push.apply(arr1, arr2);
   arr1 = unique1(arr1);
   return arr1;
}
去重数组的利器——JavaScript中的ES6数组去重方法 ES6中引入了Set数据结构,它类似于数组,但是成员的值都是唯一的,没有重复的值。利用这个特性,我们可以将数组转换为Set,然后再将Set转换回数组,实现数组的去重。方法可以根据指定的条件筛选数组中的元素,并返回一个新的数组。利用这个特性,我们可以通过遍历数组,将重复的元素过滤掉,从而实现数组的去重。上述代码中,我们先将数组转换为Set数据结构,然后再通过扩展运算符将Set转回数组,得到去重后的数组。方法可以根据指定的条件筛选数组中的元素,并返回一个新的数组。我们可以利用这个特性来实现数组的去重。 阅读详情

相关推荐

几款支持国标GB28181的平台以及视频监控设备接入的配置方法(Web端无插件播放)

GB28181解决的一个主要问题就是如何远程、跨网络、跨区域、跨级别的访问网络中的监控设备(包括IPC、NVR等),本文介绍几款G28181平台的接入配置方法,适合有监控视频摄像头的远程接入和预览需求的人群参考使用。

一名高级工程师的博客 1万+

js数组去重(9种方法),你都会了吗?

九种数组去重的方式和详解(包含对象数组去重)

前端菜鸟好先森的博客 8万+

鼎捷T100——二次开发:维护作业添加非实体字段

非实体字段添加

weixin_52342654的博客 1159

js数组去重常见的七种方法

1、借助ES6提供的Set结构 new Set() 简单好用 强烈推荐 直接给一个新的数组里面,利用es6的延展运算符 var arr = [1,9,8,8,7,2,5,3,3,3,2,3,1,4,5,444,55,22]; console.log(arr); function noRepeat(arr){ var newArr = [...new Set(arr)]; //利用了Set结构不能接收重复数据的特点 return newArr } va

Lguorong的博客 14万+

数字设计与计算机体系结构习题答案,数字设计和计算机体系结构习题答案DigitalDesignandComputerArchitecture.pdf...

数字设计和计算机体系结构习题答案DigitalDesignandComputerArchitecture.pdfDavid Money Harris and Sarah L. Harris, Digital Design and Computer Architecture, © 2007 by Elsevier Inc.Exercise SolutionsC H A P T E R ...

weixin_39851408的博客 1785

告别WSL!用AMD ROCm7在Windows上跑ComfyUI,我的幻x2025 AI Max+ 395体验与性能调优心得

本文详细介绍了在搭载AMD Ryzen AI Max+ 395处理器的幻x2025笔记本上,如何通过ROCm7在Windows原生环境下高效运行ComfyUI,并分享了一系列性能调优技巧和实战经验,帮助开发者摆脱WSL束缚,提升AI创作效率。

weixin_29102619的博客 1115

JS数组怎么去重?| JavaScript中数组去重的14种方法

JS数组怎么去重?JavaScript中数组去重的13种方法,甚是详细,遇到数组去重问题时,可翻阅查看对应的去重方法

青春木鱼的博客 1万+

12、每日卫星任务规划问题的不同公式

本文探讨了卫星任务规划问题的多种数学公式表示方法,包括传统的整数线性规划(ILP)模型、改进的基于路径的公式、基于集合覆盖的公式以及动态规划公式。通过案例研究比较了不同公式的求解效率和适用场景,并提供了使用Python进行实际求解的操作步骤。最后讨论了进一步优化策略及未来研究方向,旨在为解决卫星任务规划问题提供全面的理论支持和实践指导。

assembly8low的博客 203

JS 数组或数组对象去重的9种方法

/ 数组去重// 数组对象去重{ id: 1, name: "数据1" },{ id: 1, name: "数据2" },{ id: 2, name: "数据3" },{ id: 3, name: "数据4" },{ id: 4, name: "数据5" },{ id: 3, name: "数据6" },{ id: 5, name: "数据7" }

UserGuan的博客 1万+

SpringBoot项目搭建

SpringBoot项目搭建

私信可回答各种问题~ 1022

Android功耗系列专题分析之四:待机概率性功耗高的失效分析

本文分析了Android设备待机功耗异常高的问题。通过日志发现系统休眠失败,原因是PowerManagerService.Display唤醒锁未被释放。进一步排查发现,指纹解锁功能在灭屏时未正确释放屏幕锁定,导致DisplayReady状态异常。解决方案是将指纹功能的背光控制与DisplayReady状态控制分离,使用两个变量独立管理。经验表明,快速定位问题比解决问题更重要,修改原生流程时需谨慎评估风险。

451

JS数组去重6种方法

利用ES6 Set去重(ES6中最常用) function unique(arr){   return Array.from(new Set(arr)); } var arr=[1,1,2,3,3,3,4,4,4,5,5,'1','true',true]; console.log(unique(arr)); 此种方法对{}一些符号不起作用,可用于字符串和数字。 利用for嵌套,然后splice去重(ES5中常用) function unique(arr){ for(var .

qq_45906429的博客 186

prometheus普罗米修斯集监控外部k8s

prometheus普罗米修斯集监控外部k8s

你是我一生的追求 2247

js数组去重(包含ES5,ES6多种方法)

1.ES5常用方法 let arr =[1,2,2,3,4,4,4,4,7] for(let i =0;i<arr.length;i++){ //对数组进行遍历,用第一个依次和后面的进行比较 for(let j=i+1;j<arr.length;j++){ //如果相等就将后面相等的删除,并且删除后下标-1 if(arr[i]==arr[j]){ arr.splice(j,1) i-- }

qq_15506981的博客 1409

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

JavaScript 数组去重 ES6 方法总结

JS数组去重 ES6 方法

DHLSP15的博客 981

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

javascript 中关于数组去重的6种方法

前言最近学习着,突然发现自己心中总有些惶恐,因为发现自己写过的一些东西好像忘记了,又好像是以前就没有弄彻底,所以决定写一些代码夯实一下基础,并打消自己的顾虑,试想一个始终觉得自己基本功都不扎实的人,能在程序这条路上走得很远?万丈高楼平地起,所以基础很重要!!!这是给我自己的忠告1、最老实的方法:双重循环这种方法是最基本的去重方法,思路是循环数组的每一个元素,循环当前元素时,会和数组当前元素后的所有元

一步一个脚印 1486

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

数组中的键值对去重_[js][实战][去重][总结] - 运用es6优化js数组去重及几种去重常用方法...

博主博客--兼乎总结在前对于性能:速度最快的是:对象键值对法去重(空间换时间)最常规的是:使用indexof去重,注意ie8以下的兼容写法最土的是:使用双重循环逐个遍历推荐的是:es6优化去重至于其他优质算法去重这里不谈,我们可以相互讨论,你邮件我你的思路,谢谢。在项目中进行array去重常用有一下几种方法。1.使用for循环法思路:1.构建一个新的数组存放结果2.for循环中每次从原数组中取出一...

weixin_36310662的博客 294

es6 数组去重_js数组去重的7种方法

背景在前端面试中,关于如何实现数组元素去重一直是一个高频考点,我总结整理了几种实现方案,现分享给大家。注:本文讨论的数组去重,仅仅是针对简单类型元素,而非多维数组和对象数组。1. 双重for循环法最容易想到的应该就是通过for循环,遍历数组。如下列代码所示:vararr=[ 1, 2, 2, 3, 5, 2, 3, 1 ];vardeduplicate=function(ar...

weixin_39874366的博客 1508

es6 数组去重_js数组去重的方法及计算速度的比较

数组去重的几种方式: 第一种:相邻的值做比较var arr = [1,1,2,3,8,4,4,5,6,7,9]; var arr1 = []; for(var i = 0;i<arr.length;i++){ if(arr[i]!==arr[i+1]){ arr1.push(arr[i]); } } console.log(arr1);第二种:for循环利用splice去重fu...

weixin_39552304的博客 215

es6 数组去重_Javascript数组去重方法汇总

前言:关于数组去重,也算是一个比较常见的面试题了。但是有点开发经验的同学又会发现,前端数组去重的操作很少见(也可能是我个人经验不足遇到的比较少)。这是为什么呢?。我感觉可能是大部分的去重操作被后端处理了。个人见解! 虽然,前端很少用到。本着爱(kuai)与(su)和(zhang)平(xin)的精神,我们也来学习一波!方法汇总一、IndexOfIndexOf是数组的一个原生方法,当你传入一个参数的时...

weixin_39718006的博客 190

javascript 数组去重的多种方法(包括ES5和ES6)

概述 根据我自己的总结归纳,数组去重分为两种类型的方法,一种是在原来的的数据里面删除重复的元素,另一种是把原数组里面相同的元素添加到一个新数组里面。不管是什么方法都是利用这种解决思路去设计的。 一 .删除原数组里面重复的元素 splice()方法 1使用双重for循环遍历删除重复的元素 var numArr = [1,1,1,2,2,2,2,2,2,3,3,3,4,5,6,5,6]; var strArr = ['a','a','a','b','b','c','cc'] function norepeat(

qq_43399210的博客 1572

js 数组去重的6 种方法

var repeatArr = [2, 1, 1, 10, 12, 5, 7, 7, 2, 1]; 第一种 :利用 es6 Set 类 function repeatArrFn1(arr) { return Array.from(new Set(arr)); } function repeatArrFn10(arr) { return [...new Set(arr)] } 第四种:利用数组下标去重 function repeatArrFn4(arr){ return arr.filter

qq_43226883的博客 292

数组去重

var arr=[1,2,3,4,1,2,2,2,1]; 将arr去重? (1)传统js方法,封装一个去重函数: function noRepeat(arr){ var newArr=[]; var obj={}; for(var i=0;i<arr.length;i++){ if(obj[arr[i]]==undefined){ obj[arr...

weixin_44193613的博客 175

vue数组去重 数组对象去重

常见普通数组去重 利用Es6 Set去重 unique(arr){ return Array.from(new Set(arr)) }, 利用filter unique(arr){ return arr.filter((item,index,arr)=>{ return arr.indexOf(item,0) === index; }); }, 利用双for循环,然后solice去重 unique(arr){

z1010017573的博客 1万+

JavaScript数组去重6种方法

数组去重涉及基础知识较多,总结了以下6个方法: 双重for循环,push新数组; 双重for循环,splice原数组; 单个for循环,遍历对象属性; 单个for循环,sort排序后遍历; ES5,indexOf,定位去重; ES6,... 及set方法。 1、双层循环,若有相同的值则跳过,不相同则push进新数组 ...

weixin_30739595的博客 165

SPI驱动LED扩展:R7KA8T2LFLCAC与MAX6969实战

SPI总线是嵌入式系统中连接MCU与LED驱动芯片的常用方案,通过时钟极性与相位配置实现同步串行通信。其原理基于移位寄存器与恒流源,将有限GPIO扩展为多路输出,确保数据准确传输。技术价值在于高速、低CPU占用,尤其结合DMA可提升刷新效率。典型应用包括工业面板、仪器仪表和智能家居中控,需处理片选策略、时序匹配及信号完整性。本文以R7KA8T2LFLCAC与MAX6969为例,深入探讨SPI模式配置、硬件与软件片选对比、DMA传输优化及调试经验,助力实现清晰稳定的消息传递。

weixin_34221112的博客 371
上一篇: 双飞翼布局和圣杯布局
下一篇: defer和async
快乐的小z
博客等级 码龄9年 21粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值