JavaScript - remove Array item by delete operator v.s. splice method


讀了o'Reilly的JavaScript - the good parts,裡面有提到Array delete的部分,而我在寫JavaScript

時,是乎都沒注意到這些用法,因此在這邊做一個記錄。

一般我們在使用陣列時,如果要delete掉首尾以外的項目,可以使用operator delete,用

法如下:

var testArray = ['a', 'b', 'c', 'd'];
delete testArray[2];  //['a', 'b', 'd']

不過,雖然是delete掉了此項目['c'],但是Array的length卻是不變的,因此如果您再取用

這個array時,若是使用for以length為dimension存取,到時定會發生undefined的error。

但若是使用了splice method來增減項目的話,就可以動態控制array的長度

splice(index, count, item1, item2,....) //index, count為必填欄位

若您用testArray.splice(2, 0, 'e', 'f');  //['a', 'b',  'e', 'f', 'c', 'd']

如count的欄位設定成0,那麼就會達到add的目的;

但testArray.splice(2, 1);  //['a', 'b', 'd'] , length = 3

則因為count不為0,因此達到了delete的目的

當然,依照我以前的寫法,我可能會在run迴圈時,當碰到undefined的項目是,

我會利用if (typeof testArray[index] != 'undefined')去做篩選,

但若真正的改變了testArray的結構,也不失為一個更好的作法!

留言