Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Tìm giá trị lớn nhất trong mảng với Spread Operator

Math.max() nhận danh sách arguments rời rạc, không nhận mảng. Spread operator ... "bung" mảng thành arguments — giải pháp sạch đẹp.

Vấn đề với Math.max()

<script>
  const arr = [1, 2, 3];
  Math.max(arr);        // NaN — không nhận array
  Math.max(arr[0], arr[1], arr[2]); // 3 — nhưng phải viết tay từng phần tử
</script>

Giải pháp: Spread Operator

<script>
  const arr = [1, 2, 3];
  const max = Math.max(...arr); // 3 — spread bung mảng thành 1, 2, 3
  document.write(max);
</script>

Kết quả

3

Tương tự: Math.min()

const min = Math.min(...arr); // 1

Lưu ý quan trọng

  • Stack limit: Math.max(...hugeArray) có thể gây RangeError: Maximum call stack size exceeded nếu mảng > ~100k-200k phần tử (tùy engine).
  • Giải pháp mảng lớn: Dùng reduce hoặc loop.

An toàn cho mảng mọi kích thước

function safeMax(arr) {
  if (!arr.length) return undefined;
  // Cách 1: reduce (O(n), không stack overflow)
  return arr.reduce((max, val) => val > max ? val : max, arr[0]);
  
  // Cách 2: loop (nhanh nhất)
  // let max = arr[0];
  // for (let i = 1; i < arr.length; i++) if (arr[i] > max) max = arr[i];
  // return max;
}

So sánh hiệu suất

Phương phápMảng nhỏ (<10k)Mảng lớn (>100k)Đọc hiểu
Math.max(...arr)Nhanh, đẹpStack overflow⭐⭐⭐
arr.reduce(...)Trung bìnhAn toàn⭐⭐
for loopNhanh nhấtAn toàn⭐
Math.max.apply(null, arr)Trung bìnhStack overflow (cũ)⭐

Kết luận

Dùng Math.max(...arr) cho mảng vừa/vài nghìn phần tử. Mảng lớn hoặc performance critical → reduce hoặc for loop.