今天因为要删除数组的某些值,无奈数组只提供了shift方法和pop方法,但没有提供根据某些参数来删除数组中的值,比如我想删除数组中的值为3的项,所以就花了些时间来写了个remove方法
首先就写了个remove(n)的方法,参数n为要删除数组中值为n的项:
代码
/*
*
*@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);
然后又感觉这方法还有些不足,如参数只能一个,所以又写了个可以一次删除多个不同的值的
代码
/*
*
*@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);
后来又感觉上面这个多了个数组,如果数组很大的就会占用较大的空间了,所以又写了个,但却多了层循环,可能时间上不能上面那个
代码
/*
*
*@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);