Set实现第一种方法就是使用es6新增的Array.from()和new Set()。如果现在你还不了解es6,那你可真是out了。建议阅读ECMAScript 6 入门或者learn-es2015。
Array.prototype.unique = function() {
return Array.from(new Set(this));
}{}实现这种方法的关键点就是:判断是否相同的时候,不要忽略对元素类型的判断。
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()
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。
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;
}
共 0 条评论