Mô tả vấn đề
Chúng ta cần viết một hàm JavaScript nhận vào mảng lồng nhau arr (lồng bất kỳ cấp độ) làm đối số duy nhất.
Hàm tính tổng có trọng số của mảng lồng nhau và trả về tổng đó. Cách tính: nhân mỗi phần tử với cấp độ lồng của nó và cộng dồn qua toàn mảng.
Ví dụ, nếu đầu vào là:
const arr = [4, 7, [6, 1, [5, 2]]];
Thì đầu ra nên là:
const output = 46;
Giải thích đầu ra
Tổng được tính như sau:
(4 * 1) + (7 * 1) + (6 * 2) + (1 * 2) + (5 * 3) + (2 * 3) = 46
Ví dụ minh họa
Mã thực hiện (đệ quy):
const arr = [4, 7, [6, 1, [5, 2]]];
const findWeightedSum = (arr = [], level = 1, res = 0) => {
for(let i = 0; i < arr.length; i++){
if(typeof arr[i] === 'number'){
res += (level * arr[i]);
}else if(Array.isArray(arr[i])){
return findWeightedSum(arr[i], level + 1, res);
};
};
return res;
};
console.log(findWeightedSum(arr));Đầu ra
Kết quả trong console sẽ là:
46