数组去重二则
前端攻城狮学习笔记五:继承、原型、setInterval、数组去重一文中数组去重的题目,我想到的两种做法,记录之
两种方法都是直接操纵原始数组,未创建新数组,以提高性能
Array.prototype.distinct = function(){
for(var i = 0, l = this.length; i < l; i++){
var currentItem = this[i];
var j = i + 1;
while(j < l){
var nextItem = this[j];
if(currentItem == nextItem){
this.splice(j, 1);
l--;
j--;
}
j++;
}
}
return this;
}
后面这种方法存在的问题,lastIndexOf是JS1.6新增的,之前版本的不一定支持(From 菜鸟程序猿)
Array.prototype.distinct = function(){
var undefinedFlag = false;
for(var i = 0, l = this.length; i < l; i++){
var currentItem = this[i];
// 只保留第一个undefined数组元素
if(undefinedFlag && currentItem === void 0){
this.splice(i, 1);
l--;
i--;
continue;
}
// 找当前元素的最后一个重复元素
var lastRepeatIndex = this.lastIndexOf(currentItem);
while(lastRepeatIndex > i){
// 删除重复元素
this.splice(lastRepeatIndex, 1);
// 继续找当前元素的最后一个重复元素
lastRepeatIndex = this.lastIndexOf(currentItem);
// 数组长度-1
l--;
}
}
return this;
}

浙公网安备 33010602011771号