数组去重,是校招面试的必考知识点。简单的说,数组去重就是将一个数组中的相同的元素删除,只保留其中的一个。这里的相同实际上是一个陷阱,有好多同窗只认为值相等即为相同,而忽略类类型的判断。因此你们在进行数组去重的时候,必定要考虑周全。如下,就是笔者所实现的数组去重的几种简单的方式。前端
Set
实现第一种方法就是使用es6
新增的Array.from()
和new Set()
。若是如今你还不了解es6
,那你可真是out了。建议阅读ECMAScript 6 入门或者learn-es2015。git
Array.prototype.unique = function() { return Array.from(new Set(this)); }
{}
实现这种方法的关键点就是:判断是否相同的时候,不要忽略对元素类型的判断。es6
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; }
Array.prototype.filter
实现filter
是es5中新增的数组的一个方法。不了解的同请阅读Array.prototype.filter()github
Array.prototype.unique = function() { var sortArr = this.sort(); return sortArr.filter(function(v,i,context){ return v !== context[i+1]; }) }
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; }
Array.prototype.splice()
实现这个方法是一个很常规的方法,关键点就是在splice
一个元素以后,i
要自减1。json
Array.prototype.unique = function() { var sortArr = this.sort(), i = 0; for(; i < sortArr.length; i++){ if(sortArr[i] === sortArr[i+1]){ sortArr.splice(i,1); i--; } } return sortArr; }
Array.prototype.reduce()
实现reduce
是es5中新增的数组的一个方法。不了解的同窗请阅读Array.prototype.reduce()。数组
Array.prototype.unique = function() { 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
,这个仓库主要用于前端代码片断的搜集,欢迎你们踊跃贡献。babel