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ả
576000Giả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.