|
要是熟悉JavaScript的話,會馬上說,系統(tǒng)提供了一個delete操作,可以用來刪除數(shù)組中的元素。對,JS系統(tǒng)里確實有一個delete可以刪除數(shù)組中的元素。可是這個刪除很難用,它確實可以刪除元素,可是它卻不更新Array對象的元素計數(shù)器。例如我們執(zhí)行:
var ary = ['a', 'b', 'c'];
delete ary[1];
如果正確的執(zhí)行刪除后,我們希望會得到一個新的數(shù)組,他有兩個元素['a', 'c'],長度為2。可是執(zhí)行完后我們確實是得到了兩個元素['a', 'c']的數(shù)組,可是這個新數(shù)組的長度ary.length居然還是3!。同時我們執(zhí)行ary.toString()將得到"a,,c",這也表明數(shù)組的計數(shù)器還是3,因為Array的toString()實際上執(zhí)行的是Array.join(',')。
這樣的刪除在我們使用for( ; ; )遍歷數(shù)組的時候,將會非常的郁悶,我們可能很容易就可能被一個undefined的值搞死掉了。那么怎么才能獲得刪除數(shù)組元素后同步數(shù)組的大小呢?由于Array本身提供的pop和shift兩個函數(shù)可以"真正的"刪除數(shù)組的元素,所以我們可以使用它們來自己擴充一個remove函數(shù)。
但是pop和shift只能從數(shù)組的兩端刪掉元素,所以我們在刪除之前需要對數(shù)組做一些整理,實現(xiàn)remove方法的代碼如下:
Array.prototype.remove = function(obj)
{
for ( var i=0 ; i < this.length ; ++i )
{
if ( this[i] == obj )
{
if ( i > this.length/2 )
{
for ( var j=i ; j < this.length-1 ; ++j )
{
this[j] = this[j+1];
}
this.pop();
}
else
{
for ( var j=i ; j > 0 ; --j )
{
this[j] = this[j-1];
}
this.shift();
}
break;
}
}
};
移動整理數(shù)組的目的只是為了刪除元素后不改變剩余元素的彼此相對位置,否則只用把需要刪除的元素swap到兩端pop或shift以下就可以了。
JavaScript技術(shù):JScript內(nèi)置對象Array中元素的刪除方法,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。