数组去重,是校招口试的必考知识点。简朴的说,数组去重就是将一个数组中的雷同的元素删除,只保存个中的一个。这里的雷同实际上是一个圈套,有很多同砚只以为值相称即为雷同,而疏忽类范例的推断。所以人人在举行数组去重的时刻,一定要斟酌全面。以下,就是笔者所完成的数组去重的几种简朴的体式格局。
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;
for(; i < sortArr.length; i++){
if(sortArr[i] === sortArr[i+1]){
sortArr.splice(i,1);
i--;
}
}
return sortArr;
}
6、应用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
,这个堆栈重要用于前端代码片断的汇集,迎接人人积极孝敬。