2024-09-08 JavaScript filter() 陣列方法

todos = todos.filter((_, i) => i != index); 是用來過濾陣列的一行 JavaScript 語句,它的目的是移除某一個待辦事項(todo)並更新 todos 陣列。讓我們拆解這段程式碼的各部分:

  1. **todos.filter()**:

    • filter() 是一個 JavaScript 陣列方法,用來創建一個新陣列,包含所有通過特定條件測試的元素。
    • 這裡 filter() 方法會遍歷 todos 陣列中的每個元素,並且根據回傳的布林值決定該元素是否應該保留在新的陣列中。如果回傳 true,該元素會被保留;如果回傳 false,該元素會被移除。
  2. **(_, i)**:

    • filter() 的回呼函數有兩個參數:

      • 第一個參數 _:是陣列中目前正在處理的元素(我們這裡沒有使用這個值,所以用 _ 來表示無用的參數)。
      • 第二個參數 i:是目前元素的索引(位置)。
    • 這裡我們只關心每個元素的索引 i,以便與我們要刪除的索引 index 進行比較。

  3. **i != index**:

    • i != index 是用來比較目前元素的索引(i)是否不等於我們要刪除的那個項目的索引(index)。
    • 如果 iindex 不相等,這個元素會被保留在新陣列中,否則就會被過濾掉(即刪除)。
  4. **更新 todos**:

    • 最後,這段語句會將新的陣列(即已經過濾掉刪除項目後的陣列)賦值給 todos,從而更新 todos 變數。

簡單示範

假設我們的 todos 是這樣的陣列:

1
let todos = ['倒垃圾', '繳電話費', '採買本週食材'];

如果我們要刪除索引 1 的項目(即 '繳電話費'),那麼使用 filter 的結果如下:

1
todos = todos.filter((_, i) => i != 1);

結果是:

1
['倒垃圾', '採買本週食材']

這樣就成功刪除了索引為 1 的待辦事項。