风为人世在,在世人为风。
标签类目:数组

javascript数组唯一化实现方式

到目前为止,javascript中array还没有内置的unique方法,本来这篇文章很早就写了,但由于之前的虚拟主机忘记续费导致数据丢了,前几天JerryQu问了我这个问题,觉得可能还有其他人要,这里在写出来,备大家参考。

实现方式

这里给出2中实现方式。一种是大家应该都知道的indexOf检测的方式,另一种是结合lastIndexOf和splice实现方式。

//首先给Array对象原型上添加indexOf和lastIndexOf方法.(如果没有的话)
if(!Array.prototype.indexOf){
    
Array.prototype.indexOf = function(element, index){
        
var length = this.length;
        
if(index == null){
            
index = 0;
        
}else{
            
index = +index || 0;
            
if(index < 0) index+= length;
            
if(index < 0) index = 0;
        
}
        
for(var current;index<length;index++){
            
current = this[index];
            
if(current === element) return index;
        
}
        
return -1;
    
}
}
if(!Array.prototype.lastIndexOf){
    
Array.prototype.lastIndexOf = function(element, index){
        
var length = this.length;
        
if(index == null){
            
index = length - 1;
        
}else{
            
index = +index || 0;
            
if(index < 0) index+= length;
            
if(index < 0) index = -1;
            
else if(index >= length) index = length - 1;
        
}
        
for(var current;index>=0;index--){
            
current = this[index];
            
if(current === element) return index;
        
}
        
return -1;
    
}
}
//很常见的实现方式
var arrayUnique1 = function(arr){
    
for(var i=0,len=arr.length,result=[],item;i<len ;i++){
        
item = arr[i];
        
if(result.indexOf(item) < 0) {
            
result[result.length] = item;
        
}
    
}
    
return result;
}
//通过lastIndexOf和splice方法实现方式
var arrayUnique2 = function(arr){
    
var length = arr.length;
    
while(--length){
                
//如果在前面已经出现,则将该位置的元素删除
        
if(arr.lastIndexOf(arr[length],length-1) > -1) {
            
arr.splice(length,1);
        
}
    
}
    
return arr;   
}
<
/len>

继续阅读 »