博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数组去重--这几种方法够不?
阅读量:6832 次
发布时间:2019-06-26

本文共 1638 字,大约阅读时间需要 5 分钟。

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


1、Set实现

第一种方法就是使用es6新增的Array.from()new Set()。如果现在你还不了解es6,那你可真是out了。建议阅读或者。

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.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.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中新增的数组的一个方法。不了解的同请阅读。

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的仓库pr,这个仓库主要用于前端代码片段的搜集,欢迎大家踊跃贡献。

转载地址:http://astkl.baihongyu.com/

你可能感兴趣的文章
passportjs 源码分析
查看>>
leetcode380. Insert Delete GetRandom O(1)
查看>>
javaScript变量、作用域链
查看>>
通过手机物理返回键实现弹出层的隐藏
查看>>
前端框架Vue、angular、React的优点和缺点,以及应用场景
查看>>
ant Table rowSelection勾选后更新数据无法清除缓存(无法取消勾选)
查看>>
一次性理清JavaScript变量等高难度面试问题
查看>>
利用构建缓存机制缩短Docker镜像构建时间
查看>>
LeetCode31.下一个排列 JavaScript
查看>>
极简教程: 使用 matplotlib 绘制 GIF 动图
查看>>
数据库分片(Database Sharding)详解
查看>>
技术风险防控平台:打造金融交易系统的故障免疫能力
查看>>
怎样把酷狗音乐wav转化成高品质的MP3格式?
查看>>
浅谈算法学习
查看>>
区块链智能合约solidity入门
查看>>
js ES6 求数组的交集,并集,还有差集
查看>>
java-LearningRxjava-ch01-Thinking Reactively
查看>>
前端知识点——图片
查看>>
thinkphp源码分析(三)—自动加载篇(Loader的分析)
查看>>
Blink 真香
查看>>