给数组扩展一个remove方法

时间:2023-02-04 08:08:33

今天因为要删除数组的某些值,无奈数组只提供了shift方法和pop方法,但没有提供根据某些参数来删除数组中的值,比如我想删除数组中的值为3的项,所以就花了些时间来写了个remove方法

首先就写了个remove(n)的方法,参数n为要删除数组中值为n的项:

 

给数组扩展一个remove方法给数组扩展一个remove方法代码
   
   
   
/*
*
*@desc:删除数组中含有n的项
*/
Array.prototype.remove1 = function(n){
var l = this.length;
var _l = 0 //要删除值的个数
for(var i =0;i
< l ;i ++){
if(this[i]
== n){
var k
= i;
while(k < l){
this[k]
= this[++k];
i--;//防止后一项的值也为n而未被删除
}
_l++;
}
}
this.length -
=_l;
return this;//实现链式调用
}
var arr2
= [1,2,3,3,4,3];
arr2.remove(3).remove1(2);
alert(arr2);

然后又感觉这方法还有些不足,如参数只能一个,所以又写了个可以一次删除多个不同的值的

 

 

给数组扩展一个remove方法给数组扩展一个remove方法代码
   
   
   
/*
*
*@desc:删除数组中含有arguments的项
*/
Array.prototype.remove = function(){
var len = this.length,paras = arguments,_len = arguments.length;
var arr = [];//用一个数级保存this的值
var e = 0;
for(var i= 0 ;i
< len ;i++){
arr.push(this[i]);
}
this.length
= 0;//原来的数组清空
for(var k = 0,l=arr.length;k < l; k++){
for(var i
= 0 ; i< _len; i++){
if(arr[k]
== paras[i]) {
e
= 1;
break;
}else e
= 0;
}

if(e
== 0) this.push(arr[k]);//如果arr中的值不在arguments中则保存在this中
}
}

var arr1
= [1,2,3,3,5,4,3,3,4,3,4];
arr1.remove(3,4);
alert(arr1);

后来又感觉上面这个多了个数组,如果数组很大的就会占用较大的空间了,所以又写了个,但却多了层循环,可能时间上不能上面那个

 

 

给数组扩展一个remove方法给数组扩展一个remove方法代码
   
   
   
/*
*
*@desc:删除数组中含有arguments的项
*/
Array.prototype.remove = function(){
var l = this.length,paras = arguments,_l = arguments.length;
var _n= 0 //要删除值的个数
for(var j = 0;j
< _l ; j++){
for(var i
=0;i < l;i ++){
if(this[i]
== paras[j]){
var k
= i;
while(k < l){
this[k]
= this[++k];
i--;//防止后一项的值也为paras[j]而未被删除
}
_n++;
}
}
}
this.length -
=_n;
}
var arr1
= [1,2,'a',3,3,5,4,3,3,4,3,4];
arr1.remove(3,4,'a');
alert(arr1);