数组去重,是校招面试的必考知识点。简单的说,数组去重就是将一个数组中的相同的元素删除,只保留其中的一个。这里的相同其实是一个陷阱,有好多同学只认为值相等即为相同,而忽略类类型的判断。所以大家在进行数组去重的时候,一定要考虑周全。以下,就是笔者所实现的数组去重的几种简单的方式。


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

数组去重--这几种方法够不?相关推荐

  1. java hashmap 去重_java数组去重的两种方法

    我们对于数组元素的使用,有时候在创建数组的初期,并没有考虑过元素的重复问题.当我们想要不重复元素的数组时,就要再进行一步去重的工作.数组的去重有两种方法可以实现,一个是循环比较,另一个是hashSet ...

  2. 两个对象数组去重的3种方法

    两个对象数组去重的3种方法 前言 问题描述 解决方案一 解决方案二 解决方案三 前言 前段时间写过JavaScript数组去重最简单的 4 种方案,里面的数组元素是基本类型.本文要讲的数组元素是对象, ...

  3. 数组去重的12种方法总结

    数组去重的11种方法 (1)ES5常用:利用for嵌套for,然后splice去重 function unique(arr) {for (var i = 0; i < arr.length; i ...

  4. java数组去重方法是,java数组去重的两种方法

    我们对于数组元素的使用,有时候在创建数组的初期,并没有考虑过元素的重复问题.当我们想要不重复元素的数组时,就要再进行一步去重的工作.数组的去重有两种方法可以实现,一个是循环比较,另一个是hashSet ...

  5. JavaScript数组去重的五种方法

    JavaScript数组去重的五种方法 先简单准备一个数组,用于方法的实验: let array = [1,1,2,3,4,4,1,5,6,6,7,7,7]; console.log(`去重前的数组: ...

  6. Js中数组去重的几种方法

    前几天在看前端面试题的时候,其中js部分有个问题是实现数组去重的算法,一开始就想了一两种方法,后来仔细回忆了下这个题,觉得该问题实现方法确实不止局限于一两种方法 ,从不同的角度去看待该问题就会有多种实 ...

  7. JS----JavaScript数组去重(12种方法,史上最全)

    数组去重的方法 一.利用ES6 Set去重(ES6中最常用) Set 不包含重复元素的值的集合 Map 双列集合 键值对 与object的区别 : object中的key只能是string类型 而Ma ...

  8. 原生JS数组去重的几种方法

    有时候我们做项目的时候往往会需要把数组里面一些重复的项去掉,但是原生JS有排序,有筛选等等,但是就是没有数组去重怎么办呢? 这能怎么办,自己手动实现嘛.(以下代码直接在原型上添加的的方法,为的就是和原 ...

  9. 2019.08.30数组去重的几种方法以及所需时间对比

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

最新文章

  1. 第 十 天 : 添 加 硬 盘 和 分 区 挂 载 等
  2. WebService大讲堂之Axis2(3):使用services.xml文件发布WebService
  3. python中df head_10招!看骨灰级Pythoner如何玩转Python
  4. C++输入/输出文件
  5. .NET Core容器化之多容器应用部署@Docker-Compose
  6. 冒泡和快速排序的时间复杂度_八大排序算法性能分析及总结
  7. oracle数据库生产,从安装系统到oracle数据库生产环境(centos6.8)搭建
  8. StringUtils详细介绍
  9. nest.js实战之集成Linkedin登录
  10. 暴风激活后浏览器被锁定首页
  11. 手机号归属地区编码_关于手机号码的详细解析~
  12. 电视盒子刷鸿蒙系统,家里的智能电视能装鸿蒙系统吗?鸿蒙系统有哪些优势?...
  13. 螺丝螺母垫片顺序图片_如何计算螺丝,螺栓和螺母的尺寸
  14. 3D打印的四种应用场合
  15. Oracle JDE R23更新快报
  16. 如何正确理解商业智能BI的实时性?
  17. 《真三国无双5》全人研究完整版
  18. CRM项目第一天(2021-12-16)1
  19. Bugzilla安装完初次登录提示“couldn‘t create child process: 720002: index.cgi”解决方法
  20. python文字转语音输出_Python文字转语音

热门文章

  1. 利用Mircosoft URLRewriter.dll实现asp.net页面伪静态
  2. 《LeetCode力扣练习》第62题 不同路径 Java
  3. ofdma技术_科普:何为第六代WiFi技术?你家也可以轻松实现1.6G每秒的网速
  4. 深度linux创建微信图标,Deepin Linux 下基于deepin-wine的微信图标不见的问题解决
  5. python处理心电图_ECG心电信号处理:使用WFDB对MIT-BIH数据集进行读取(Python)
  6. pyecharts x轴全显示_超详细Pyecharts 1.x 教程,让你的图表动起来
  7. ios计算机隐藏功能,7个iOS14隐藏功能,看完想立马更新,有你不知道的
  8. html src加载外部静态资源,前端性能优化2:静态资源加载与优化
  9. C++知识点47——类继承中的类型转换与访问权限控制(下)
  10. MATLAB修改工作环境