数组去重--这几种方法够不?
数组去重,是校招面试的必考知识点。简单的说,数组去重就是将一个数组中的相同的元素删除,只保留其中的一个。这里的相同其实是一个陷阱,有好多同学只认为值相等即为相同,而忽略类类型的判断。所以大家在进行数组去重的时候,一定要考虑周全。以下,就是笔者所实现的数组去重的几种简单的方式。
1、Set
实现
第一种方法就是使用es6
新增的Array.from()
和new Set()
。如果现在你还不了解es6
,那你可真是out了。建议阅读ECMAScript 6 入门或者learn-es2015。
Array.prototype.unique = function() {return Array.from(new Set(this)); }
2、结合{}
实现
这种方法的关键点就是:判断是否相同的时候,不要忽略对元素类型的判断。
Array.prototype.unique = function() {var json = {}; var result = []; this.forEach(function(value){ var type = Object.prototype.toString.call(value).match(/\s(\w+)/)[1].toLowerCase(); if(!((type + '-'+value) in json)){ json[type + '-'+value] = true; result.push(value); } }) return result; }
3、利用Array.prototype.filter
实现
filter
是es5中新增的数组的一个方法。不了解的同请阅读Array.prototype.filter()
Array.prototype.unique = function() {var sortArr = this.sort(); return sortArr.filter(function(v,i,context){ return v !== context[i+1]; }) }
4、利用Array.prototype.forEach
实现
includes
也是es6
新增的方法。不了解的同请阅读Array.prototype.includes()
Array.prototype.unique = function() {var result = []; this.forEach(function(v){ if(!result.includes(v)){ result.push(v); } }) return result; }
5、利用Array.prototype.splice()
实现
这个方法是一个很常规的方法,关键点就是在splice
一个元素之后,i
要自减1。
Array.prototype.unique = function() {var sortArr = this.sort(), i = 0, len = sortArr.length; for(; i < len; i++){ if(sortArr[i] === sortArr[i++]){ sortArr.splice(i,1); i--; } } return sortArr; }
6、利用Array.prototype.reduce()
实现
reduce
是es5中新增的数组的一个方法。不了解的同请阅读Array.prototype.reduce()。
var sortArr = this.sort(), result = [];sortArr.reduce((v1,v2) => {if(v1 !== v2){result.push(v1);}return v2;})result.push(sortArr[sortArr.length - 1]); return result; }
以上就是笔者所想到的几个数组去重的方式,大家如果有更好的方法,欢迎留言。也可以去我的github
的仓库snippetspr
,这个仓库主要用于前端代码片段的搜集,欢迎大家踊跃贡献。
转载于:https://www.cnblogs.com/libin-1/p/6255926.html
数组去重--这几种方法够不?相关推荐
- java hashmap 去重_java数组去重的两种方法
我们对于数组元素的使用,有时候在创建数组的初期,并没有考虑过元素的重复问题.当我们想要不重复元素的数组时,就要再进行一步去重的工作.数组的去重有两种方法可以实现,一个是循环比较,另一个是hashSet ...
- 两个对象数组去重的3种方法
两个对象数组去重的3种方法 前言 问题描述 解决方案一 解决方案二 解决方案三 前言 前段时间写过JavaScript数组去重最简单的 4 种方案,里面的数组元素是基本类型.本文要讲的数组元素是对象, ...
- 数组去重的12种方法总结
数组去重的11种方法 (1)ES5常用:利用for嵌套for,然后splice去重 function unique(arr) {for (var i = 0; i < arr.length; i ...
- java数组去重方法是,java数组去重的两种方法
我们对于数组元素的使用,有时候在创建数组的初期,并没有考虑过元素的重复问题.当我们想要不重复元素的数组时,就要再进行一步去重的工作.数组的去重有两种方法可以实现,一个是循环比较,另一个是hashSet ...
- JavaScript数组去重的五种方法
JavaScript数组去重的五种方法 先简单准备一个数组,用于方法的实验: let array = [1,1,2,3,4,4,1,5,6,6,7,7,7]; console.log(`去重前的数组: ...
- Js中数组去重的几种方法
前几天在看前端面试题的时候,其中js部分有个问题是实现数组去重的算法,一开始就想了一两种方法,后来仔细回忆了下这个题,觉得该问题实现方法确实不止局限于一两种方法 ,从不同的角度去看待该问题就会有多种实 ...
- JS----JavaScript数组去重(12种方法,史上最全)
数组去重的方法 一.利用ES6 Set去重(ES6中最常用) Set 不包含重复元素的值的集合 Map 双列集合 键值对 与object的区别 : object中的key只能是string类型 而Ma ...
- 原生JS数组去重的几种方法
有时候我们做项目的时候往往会需要把数组里面一些重复的项去掉,但是原生JS有排序,有筛选等等,但是就是没有数组去重怎么办呢? 这能怎么办,自己手动实现嘛.(以下代码直接在原型上添加的的方法,为的就是和原 ...
- 2019.08.30数组去重的几种方法以及所需时间对比
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
最新文章
- 第 十 天 : 添 加 硬 盘 和 分 区 挂 载 等
- WebService大讲堂之Axis2(3):使用services.xml文件发布WebService
- python中df head_10招!看骨灰级Pythoner如何玩转Python
- C++输入/输出文件
- .NET Core容器化之多容器应用部署@Docker-Compose
- 冒泡和快速排序的时间复杂度_八大排序算法性能分析及总结
- oracle数据库生产,从安装系统到oracle数据库生产环境(centos6.8)搭建
- StringUtils详细介绍
- nest.js实战之集成Linkedin登录
- 暴风激活后浏览器被锁定首页
- 手机号归属地区编码_关于手机号码的详细解析~
- 电视盒子刷鸿蒙系统,家里的智能电视能装鸿蒙系统吗?鸿蒙系统有哪些优势?...
- 螺丝螺母垫片顺序图片_如何计算螺丝,螺栓和螺母的尺寸
- 3D打印的四种应用场合
- Oracle JDE R23更新快报
- 如何正确理解商业智能BI的实时性?
- 《真三国无双5》全人研究完整版
- CRM项目第一天(2021-12-16)1
- Bugzilla安装完初次登录提示“couldn‘t create child process: 720002: index.cgi”解决方法
- python文字转语音输出_Python文字转语音
热门文章
- 利用Mircosoft URLRewriter.dll实现asp.net页面伪静态
- 《LeetCode力扣练习》第62题 不同路径 Java
- ofdma技术_科普:何为第六代WiFi技术?你家也可以轻松实现1.6G每秒的网速
- 深度linux创建微信图标,Deepin Linux 下基于deepin-wine的微信图标不见的问题解决
- python处理心电图_ECG心电信号处理:使用WFDB对MIT-BIH数据集进行读取(Python)
- pyecharts x轴全显示_超详细Pyecharts 1.x 教程,让你的图表动起来
- ios计算机隐藏功能,7个iOS14隐藏功能,看完想立马更新,有你不知道的
- html src加载外部静态资源,前端性能优化2:静态资源加载与优化
- C++知识点47——类继承中的类型转换与访问权限控制(下)
- MATLAB修改工作环境