找出長度最長的那個字串的字數

 好的,要從一個字串陣列中找出長度最長的那個字串的字數(即長度),您可以使用幾種方法。以下是幾種常見且清晰的寫法:

假設您的陣列是:

      const s = ['一二三', '一二', '一二三四五', '短', '']; // 加入更多測試案例,包括空字串
    

方法一:使用 for 迴圈遍歷 (最基礎)

      functionfindMaxLengthLoop(arr) {
  if (!arr || arr.length === 0) {
    return 0; // 或者拋出錯誤,或返回 -1 等,表示空陣列或無效輸入
  }

  let maxLength = 0;
  for (let i = 0; i < arr.length; i++) {
    const currentLength = arr[i].length;
    if (currentLength > maxLength) {
      maxLength = currentLength;
    }
  }
  return maxLength;
}

const longestLengthLoop = findMaxLengthLoop(s);
console.log("For loop - Max length:", longestLengthLoop); // 輸出: 5
    
  • 邏輯: 初始化一個 maxLength 為 0。遍歷陣列中的每個字串,獲取其長度,如果當前長度大於 maxLength,則更新 maxLength

  • 優點: 非常直觀,容易理解。

  • 缺點: 相對其他方法,程式碼稍長。

方法二:使用 Array.prototype.reduce() (函數式風格,較簡潔)

      functionfindMaxLengthReduce(arr) {
  if (!arr || arr.length === 0) {
    return 0;
  }
  return arr.reduce((maxLength, currentString) => {
    return Math.max(maxLength, currentString.length);
  }, 0); // 初始值設為 0
}

const longestLengthReduce = findMaxLengthReduce(s);
console.log("Reduce - Max length:", longestLengthReduce); // 輸出: 5
    
  • 邏輯: reduce 方法遍歷陣列,將每個元素(currentString)與一個累加器(maxLength)進行比較。Math.max() 用於返回兩者中的較大值。初始累加器值設為 0。

  • 優點: 更函數式,程式碼更簡潔。

  • 缺點: 對於不熟悉 reduce 的人來說,初看可能不如 for 迴圈直觀。

方法三:使用 Array.prototype.map() 轉換為長度陣列,然後取最大值 (分步清晰)

      functionfindMaxLengthMap(arr) {
  if (!arr || arr.length === 0) {
    return 0;
  }
  const lengths = arr.map(str => str.length); // 獲取所有字串的長度組成新陣列
  return Math.max(...lengths); // 使用展開運算符將長度陣列傳給 Math.max
}

const longestLengthMap = findMaxLengthMap(s);
console.log("Map & Math.max - Max length:", longestLengthMap); // 輸出: 5
    
  • 邏輯:

    1. 使用 map() 將原始字串陣列轉換為一個只包含每個字串長度的數字陣列。

    2. 使用 Math.max() 並配合展開運算符 (...) 找到這個數字陣列中的最大值。

  • 優點: 步驟清晰,易於理解。

  • 缺點: 需要創建一個中間的長度陣列,對於非常大的陣列可能略有額外記憶體開銷(但通常可忽略)。

方法四:排序後取第一個 (或最後一個,取決於排序方式) (不推薦,效率低)

      functionfindMaxLengthSort(arr) {
  if (!arr || arr.length === 0) {
    return 0;
  }
  // 複製陣列以避免修改原陣列
  const sortedArr = [...arr].sort((a, b) => b.length - a.length); // 按長度降序排序
  return sortedArr[0].length; // 取第一個(最長的)的長度
}

const longestLengthSort = findMaxLengthSort(s);
console.log("Sort - Max length:", longestLengthSort); // 輸出: 5
    
  • 邏輯: 將陣列按字串長度降序排序,然後取第一個元素的長度。

  • 優點: 如果您還需要排序後的陣列用於其他目的,這可能順便完成。

  • 缺點: 效率最低! 排序的時間複雜度通常是 O(n log n),而我們只需要遍歷一次 (O(n)) 就能找到最大長度。對於這個特定問題,排序是「殺雞用牛刀」。

結論與推薦:

對於「找出字串陣列中最長字串的字數」這個問題:

  • Array.prototype.reduce() (方法二) 是最簡潔且函數式的寫法。

  • Array.prototype.map() + Math.max(...lengths) (方法三) 步驟清晰,也很好。

  • 傳統的 for 迴圈 (方法一) 非常直觀,對於初學者或追求明確性的情況也完全沒問題。

避免使用排序法 (方法四),因為效率不高。

您可以根據個人偏好和團隊的程式碼風格選擇前三種方法中的任何一種。它們都能正確有效地解決問題。

留言

這個網誌中的熱門文章

Offscreen Canvas

外部網頁新增 Google 日曆行程(URL模板)

計算 Canvas 文字最大字體