1. 程式人生 > >JS中徹底刪除json物件組成的陣列中的元素

JS中徹底刪除json物件組成的陣列中的元素

只是分享一個小知識~

在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     可選,選擇新增操作時填入,表示需要新增的元素。