2024-09-08 JavaScript filter() 陣列方法
todos = todos.filter((_, i) => i != index);
是用來過濾陣列的一行 JavaScript 語句,它的目的是移除某一個待辦事項(todo
)並更新 todos
陣列。讓我們拆解這段程式碼的各部分:
**
todos.filter()
**:filter()
是一個 JavaScript 陣列方法,用來創建一個新陣列,包含所有通過特定條件測試的元素。- 這裡
filter()
方法會遍歷todos
陣列中的每個元素,並且根據回傳的布林值決定該元素是否應該保留在新的陣列中。如果回傳true
,該元素會被保留;如果回傳false
,該元素會被移除。
**
(_, i)
**:filter()
的回呼函數有兩個參數:- 第一個參數
_
:是陣列中目前正在處理的元素(我們這裡沒有使用這個值,所以用_
來表示無用的參數)。 - 第二個參數
i
:是目前元素的索引(位置)。
- 第一個參數
這裡我們只關心每個元素的索引
i
,以便與我們要刪除的索引index
進行比較。
**
i != index
**:i != index
是用來比較目前元素的索引(i
)是否不等於我們要刪除的那個項目的索引(index
)。- 如果
i
和index
不相等,這個元素會被保留在新陣列中,否則就會被過濾掉(即刪除)。
**更新
todos
**:- 最後,這段語句會將新的陣列(即已經過濾掉刪除項目後的陣列)賦值給
todos
,從而更新todos
變數。
- 最後,這段語句會將新的陣列(即已經過濾掉刪除項目後的陣列)賦值給
簡單示範
假設我們的 todos
是這樣的陣列:
1 | let todos = ['倒垃圾', '繳電話費', '採買本週食材']; |
如果我們要刪除索引 1
的項目(即 '繳電話費'
),那麼使用 filter
的結果如下:
1 | todos = todos.filter((_, i) => i != 1); |
結果是:
1 | ['倒垃圾', '採買本週食材'] |
這樣就成功刪除了索引為 1
的待辦事項。