JS中徹底刪除json物件組成的陣列中的元素
阿新 • • 發佈:2019-01-27
只是分享一個小知識~
在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 可選,選擇新增操作時填入,表示需要新增的元素。