HOWTO · JavaScript
在 JavaScript 中從陣列中刪除第一個元素
本文介紹如何從 JavaScript 陣列中移除第一個元素的幾種方法。
本頁內容
若要從 JavaScript 陣列中移除第一個元素,可使用 shift() 或 splice(0, 1) 修改原陣列。若要保留原陣列,則可使用 slice(1) 或 filter() 建立新陣列。shift() 會以單一值回傳移除的元素,而 splice(0, 1) 則會以陣列回傳該元素。
修改原陣列以移除第一個元素
shift() 和 splice() 都會從原陣列中移除元素。如果要移除的總是第一個元素,請選用 shift();如果要依指定索引移除元素,或一次移除多個元素,請選用 splice()。
shift() 會移除索引 0 的元素,將其餘元素往前移,並回傳被移除的值。執行下方範例後,可以看到更新後的陣列和取回的元素;輸出標籤維持英文:
本節中的程式碼以及顯示的標籤或輸出仍為英文。
const items = ["first", "second", "third"];
const removed = items.shift();
console.log(JSON.stringify({ items, removed }));
{"items":["second","third"],"removed":"first"}
執行這些敘述後,items 會包含最後兩個字串,而 removed 會包含 "first"。在 JavaScript 執行環境中,JSON.stringify() 會將印出的物件轉成單行 JSON。
若要指定移除位置,請使用 splice(start, deleteCount)。移除第一個元素時,將 start 設為 0,並將 deleteCount 設為 1。這會修改原陣列,而方法會以陣列回傳被移除的元素。例如,若 const values = ["red", "green", "blue"],執行 const removed = values.splice(0, 1) 後,values 會變成 ["green", "blue"],而 removed 會是 ["red"]。
start 引數指定索引,不代表移動方向。非負索引從陣列開頭計算,負索引則從陣列末端往回計算(-1 指最後一個元素)。deleteCount 指定要從該位置移除的元素數量。若省略此引數,splice() 會移除從 start 到陣列末端的所有元素。放在 deleteCount 之後的元素會插入該位置。如需了解方法的完整參數行為,請參閱 MDN 的 splice() 參考文件。
不修改原陣列而移除第一個元素
slice() 和 filter() 都會回傳新陣列,並保留輸入陣列不變。若要直接複製第一個元素之後的所有元素,可使用 slice(1)。start 索引所指的元素會包含在結果中;選用的 end 索引則不會包含。因此,values.slice(1) 會從索引 1 複製到陣列末端,不會移除 values 中的任何元素。更多資訊請參閱 slice() 指南和 MDN 的 slice() 參考文件。
若要依條件決定移除哪些元素,請使用 filter()。它會對每個元素呼叫回呼函式,並將回傳 true 的元素納入新陣列。若只要略過第一個位置,可以依索引篩選:
const remaining = values.filter((item, index) => index > 0);
這會保留後續元素原有的順序,也不會修改 values。依索引篩選代表套用位置規則;即使陣列已重新排序,仍會排除索引 0 的元素,不論該元素的值為何。
例如,若 const values = ["red", "green", "blue"],values.slice(1) 和 values.filter((item, index) => index > 0) 都會建立包含 ["green", "blue"] 的新陣列,而 values 仍會是 ["red", "green", "blue"]。
選擇符合陣列需求的方法
- 若要修改原陣列,且需要以單一值取得被移除的元素,請使用
shift()。 - 若要修改原陣列,且需要以陣列取得被移除的元素,或要調整索引和數量以移除其他位置的元素,請使用
splice(0, 1)或依需求調整參數。 - 若要建立包含第一個元素之後所有元素的新陣列,請使用
slice(1)。 - 若要依條件決定保留哪些元素,請使用
filter();使用索引條件即可略過第一個位置。
關鍵在於其他程式碼是否仍需要使用原陣列。會修改陣列的方法會更新共用的原陣列,因此所有指向它的參照都會看到變更;不會修改陣列的方法則會保留原陣列,並回傳另一個結果。這四種方法都會維持保留元素之間的相對順序。