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

Nhân đệ quy các số trong mảng lồng nhau - JavaScript

Viết hàm JavaScript nhân tất cả các giá trị số trong mảng lồng nhau (nested array), bỏ qua các giá trị falsy (null, undefined, false, 0, "").

Dữ liệu mẫu

const arr = [1, 5, 2, null, [
  2, 5, null, undefined, false, 5, [
    1, 3, false, 0, 2
  ], 4, 2, false
], 4, 6, 0];

Giải pháp

Duyệt mảng bằng vòng lặp, nếu gặp mảng con thì gọi đệ quy, nếu là số thì nhân vào tích lũy (dùng || 1 để bỏ qua giá trị falsy).

const arr = [1, 5, 2, null, [
  2, 5, null, undefined, false, 5, [
    1, 3, false, 0, 2
  ], 4, 2, false
], 4, 6, 0];

const recursiveMultiplication = arr => {
  let prod = 1;
  for (let i = 0; i < arr.length; i++) {
    if (Array.isArray(arr[i])) {
      prod *= recursiveMultiplication(arr[i]);
    } else {
      // arr[i] || 1: giá trị falsy (null, 0, false...) thành 1 (phần tử trung hòa của phép nhân)
      prod *= arr[i] || 1;
    }
  }
  return prod;
};

console.log(recursiveMultiplication(arr));

Kết quả

576000

Giải thích tính toán:

  • Mảng con cấp 3: 1 × 3 × 2 = 6 (bỏ qua false, 0)
  • Mảng con cấp 2: 2 × 5 × 5 × 6 × 4 × 2 = 4800
  • Mảng gốc: 1 × 5 × 2 × 4800 × 4 × 6 = 576000

Lưu ý: Cách dùng val || 1 bỏ qua cả số 0. Nếu cần nhân số 0 (kết quả = 0), hãy kiểm tra typeof val === 'number' && !isNaN(val) thay vì dùng toán tử OR.