只是分享一個小知識~
在JS中,對於某個由json對象組成的數組,例如:
var test = [{ "a": "1", "b": "2" }, { "a": "3", "b": "4" }, { "a": "5", "b": "6" }];
如果我們想要刪除其中的第二個json對象,應該怎么做呢?其實方法和操作數組完全相同。
在最開始的時候嘗試使用了delete運算符,但在查詢數組長度的時候發現其實這種方法並不是徹底刪除元素,而是刪除它的值,但仍會保留空間。
var test = [{ "a": "1", "b": "2" }, { "a": "3", "b": "4" }, { "a": "5", "b": "6" }]; test.length //輸出為 3 delete test[1]; test.length //輸出仍為 3
查詢運算符delete我們知道它只是將該值置為undefined,而不會影響數組長度,即將其變為稀疏數組(《JS權威指南》7.5節)。
了解及此,也許想着可以將刪除點之后的元素各往前移動1個單位,實現徹底剔除該元素,但在JS方法中我們可以查到一種更加簡便的方式:splice() 方法
var test = [{ "a": "1", "b": "2" }, { "a": "3", "b": "4" }, { "a": "5", "b": "6" }]; test.length //輸出為 3 test.splice(1, 1); test.length //輸出為 2
刪除后test.length變為2,這正是我們想要的結果。
在W3C中我們可以查到有關於splice()的描述:
arrayObject.splice(index, howmany, item1, ....., itemX) 方法向/從數組中添加/刪除項目,然后返回被刪除的項目。
參數1:index 為插入添加或(和)刪除的起始位置;
參數2:howmany 指定從數組中添加/刪除的元素個數;
參數3:item1, ....., itemX 可選,選擇添加操作時填入,表示需要添加的元素。