当前位置: 首页 > news >正文

数组去重的12重方法

1.利用ES6 Set去重(ES重最常用)

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

这种去重的方法代码最少。这种方法无法去掉{}空对象,后面的高阶方法会添加去重复{}的方法。

2.利用for嵌套,然后splice去重(ES5重常见)

function unique(arr){for(var i=0;i<arr.length;i++){for(var j=0;j<arr.length;j++){{if(arr[i] === arr[j]){arr.splice(j,1);j--;}}}
}

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

3.利用indexOf去重

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

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

4.利用sort()

function unique(arr){if(!Array.isArray(arr)){console.log('typr error')return }arr = arr.sort() // 进行排序var array = [arr[0]];for(var i=1;i<arr.length;i++){if(arr[i]!==arr[i-1])array.push(arr[i]);}return array;
}

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

5. 利用对象属性不能相同的特性进行去重(这个的方法有问题,不建议使用)

关键代码:

var array = [];
var obj = {};
for(var i=0; i<arr.length;i++){if(!obj[arr[i]]){array.push(arr[i]);obj[arr[i]] = 1;}else{obj[arr[i]] ++;}
}

6.利用includes

function unique(arr){if(!Array.isArray(arr)){console.log('typr error')return }var array = [];for(var i=0;i<arr.length;i++){if(!array.includes(arr[i]){// includes检测数组是否有某值array.push(arr[i])}}return array;
}

7.利用hasProperty

hasProperty判断是否在对象属性。

function unique(arr) {let obj = {}let res = arr.filter(item => {if (obj.hasOwnProperty(typeof item + item)) {return false} else {obj[typeof item + item] = truereturn true}})return res
}

8.利用filter

function unique(arr){return arr.filter( function(item,index,arr){// 当前元素,在原始数组重第一个索引 == 当前索引值,否则返回当前元素return arr.indexOf( item,0 ) == index;})
}

9.利用递归去重

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.aplice(index,1);}loop(index-1);}}loop(len-1);return array;
}

10.利用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);array.push(arr[i]);}}
}

创建一个空Map数据结构,遍历需要去重的数组,把数组的每个元素作为key存到Map重。由于Map中不会出现相同的值,所以最终得到的就是去重后的结果。

11.利用reduce+includes

function unique(arr){return arr.reduce((prev,cur)=>prev.includes(cur) ? [...prev,cur],[]);
}

12. […new Set(arr)]

第一种方法的简化

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 运维大规模K8S集群注意事项
  • java 函数接口Consumer简介与示例【函数式编程】【Stream】
  • 大学生实用工具!分享5款靠谱AI一键生成毕业论文的网站
  • 5个免费在线 AI 绘画网站推荐,附100+提示词!
  • 什么是上网行为管理呢?【上网行为管理系统功能介绍 】
  • 【C++ 面试 - 面向对象】每日 3 题(六)
  • LeetCode17 电话号码的字母组合
  • STM32——I2C通信外设
  • 深度理解指针(2)
  • 探索Unity3D URP后处理在UI控件Image上的应用
  • 使用cbsd指令快速创建bhyve Ubuntu虚拟机实践
  • Apache CloudStack Official Document 翻译节选(八)
  • IO进程线程8月22日
  • EasyExcel动态实现表头以及数据封装
  • 树莓派开发笔记10-树莓派的HTTP通信实验
  • [iOS]Core Data浅析一 -- 启用Core Data
  • Angularjs之国际化
  • JS数组方法汇总
  • Material Design
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • VuePress 静态网站生成
  • vue中实现单选
  • 编写符合Python风格的对象
  • 初识 webpack
  • 好的网址,关于.net 4.0 ,vs 2010
  • 基于 Babel 的 npm 包最小化设置
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 如何利用MongoDB打造TOP榜小程序
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 试着探索高并发下的系统架构面貌
  • 微信小程序设置上一页数据
  • 用Visual Studio开发以太坊智能合约
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • 从如何停掉 Promise 链说起
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • #vue3 实现前端下载excel文件模板功能
  • (12)目标检测_SSD基于pytorch搭建代码
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (Java企业 / 公司项目)点赞业务系统设计-批量查询点赞状态(二)
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (二)fiber的基本认识
  • (附源码)php投票系统 毕业设计 121500
  • (汇总)os模块以及shutil模块对文件的操作
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (七)Flink Watermark
  • (顺序)容器的好伴侣 --- 容器适配器
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • .Net 6.0--通用帮助类--FileHelper
  • .NET Core 实现 Redis 批量查询指定格式的Key