Reputation: 53
Getting error arr.reduce is not a function for multidimensional arrays - works fine for simple arrays - not sure what's going wrong?
let arr = [4, [5, 7]]
let sum = 0
const calculateSum = (arr) => {
return arr.reduce(function(acc, currentVal) {
const isEntryArray = Array.isArray(currentVal)
if (isEntryArray) {
acc= acc + calculateSum(currentVal)
} else {
acc = acc + currentVal
}
return acc
}, 0)
}
console.log(calculateSum(arr))
console.log(sum) ```
Upvotes: 2
Views: 69
Reputation: 63524
Instead of using a recursive function flatten the array and then use reduce to calculate the sum.
const arr = [4, [5, 7, [12, [1, 2]]]];
function calculateSum(arr) {
return arr.flat(Infinity).reduce(function (acc, c) {
return acc + c;
}, 0);
}
console.log(calculateSum(arr));
Upvotes: 3
Reputation: 171679
You are passing in a boolean not an array when you do:
acc= acc + calculateSum(isEntryArray)
// ^^^ from Array.isArray()
I believe what you wanted was to pass in the current sub array
acc= acc + calculateSum(currentVal)
Upvotes: 0