当前位置: 代码迷 >> Web前端 >> 扩充数组的remove方法
  详细解决方案

扩充数组的remove方法

热度:257   发布时间:2012-11-03 10:57:44.0
扩展数组的remove方法
var array = ["one", "two","three","four"];  
//数组中现在的内容为:  
//one,two,three,four  
//array.length == 4  
delete array[2];

数组结果:
one, two, undefined, four
//array.length == 4

可以看到,delete只是将数组array的第三个位置上的元素删掉了,可是数组的长度没有改变,显然这个不是我们想要的结果,不过我们可以借助数组对象自身的slice

方法来做到。一个比较好的实现,是来自于jQuery的设计者John Resig:

//Array Remove - By John Resig (MIT Licensed)  
Array.prototype.remove = function(from, to) {  
    var rest = this.slice((to || from) + 1 || this.length);  
    this.length = from < 0 ? this.length + from : from;  
    return this.push.apply(this, rest);  
};

这个函数扩展了JavaScript的内置对象Array,这样,我们以后的所有声明的数组都会自动的拥有remove能力,我们来看看这个方法的用法:
var array = ["one", "two", "three", "four", "five", "six"];  
print(array);  
array.remove(0);//删除第一个元素  
print(array);  
array.remove(-1);//删除倒数第一个元素  
print(array);  
array.remove(0,2);//删除数组中下标为0-2的元素(3个)  
print(array);
得到结果:
one,two,three,four,five,six
two,three,four,five,six
two,three,four,five
five

也就是说,remove接受两个参数,第一个参数为起始下标,第二个参数为结束下标,其中第二个参数可以忽略,这种情况下会删除指定下标的元素。当然,不是每个人

都希望影响整个原型链(原因在下一个小节里讨论),因此可以考虑另一种方式:
//Array Remove - By John Resig (MIT Licensed)  
Array.remove = function(array, from, to) {  
    var rest = array.slice((to || from) + 1 || array.length);  
    array.length = from < 0 ? array.length + from : from;  
    return array.push.apply(array, rest);  
};

其操作方式与前者并无二致,但是不影响全局对象,代价是你需要显式的传递需要操作的数组作为第一个参数:
var array = ["one", "two", "three", "four", "five", "six"];  
Array.remove(array, 0, 2);//删除0, 1, 2三个元素  
print(array); 
这种方式,相当于给JavaScript内置的Array添加了一个静态方法。

  相关解决方案