前言

JavaScript 提供了許多陣列方法來處理資料, 其中 find()reduce() 是兩個常用但功能完全不同的方法. 這篇文章將詳細介紹它們的用法與差異.

find() 方法

語法

array.find(callback[, thisArg])

功能

尋找符合指定條件的第一個元素, 如果找到則返回該元素, 否則返回 undefined.

callback 參數

接受 3 個參數:

  • element: 當前遍歷到的陣列元素
  • index (可選): 當前遍歷到的陣列元素的索引
  • array (可選): 被遍歷的陣列

返回值: 如果符合指定條件, 則返回 true, 否則返回 false.

範例

const arr = [1, 2, 3, 4, 5];
const result = arr.find((num) => num > 3);

console.log(result); // 4

(num) => num > 3 是回調函數, 用來判斷陣列中的每個元素是否大於 3. 當第一個符合條件的元素被找到時, 該元素就會成為 find() 方法的返回值.

  • num: 當前遍歷到的陣列元素
  • num > 3: 表示判斷當前的元素是否大於 3

reduce() 方法

語法

array.reduce(callback[, initialValue])

功能

對陣列中的所有元素進行累加計算, 返回計算結果.

callback 參數

接受 4 個參數:

  • accumulator: 上一次調用回調函數時返回的累積值或初始值
  • currentValue: 當前遍歷到的陣列元素
  • index (可選): 當前遍歷到的陣列元素的索引
  • array (可選): 被計算的陣列

返回值: 返回計算結果.

範例

const arr = [1, 2, 3, 4, 5];
const result = arr.reduce((sum, num) => sum + num, 0);

console.log(result); // 15

(sum, num) => sum + num 是回調函數, 用來將陣列中的每個元素與之前的累加值相加, 得到新的累加值.

  • sum: 上一次回調函數返回的累加值, 初始值為 0
  • num: 當前遍歷到的陣列元素
  • sum + num: 表示將上一次的累加值 sum 和當前的元素值 num 相加
  • 0: 是 reduce() 方法的第二個參數, 表示初始值. 因為第一次調用回調函數時, 上一次的累加值為初始值, 而不是陣列的第一個元素

總結

兩個方法的主要差異:

  • find() 方法尋找符合指定條件的第一個元素, 而 reduce() 方法對陣列中的所有元素進行累加計算
  • find() 方法的回調函數返回布爾值, 而 reduce() 方法的回調函數返回計算結果
  • find() 方法返回找到的元素, 如果沒有找到則返回 undefined, 而 reduce() 方法返回計算結果