find sum of numbers present in elements in nested array
find sum of numbers present in elements in nested array
by gauravkrp
JavaScript
/* sum([1, 'x', '2x', ['3', ['x2', '5']]]); */
const findNumInStringRegex = /\d+/;
const flattenArr = (arr, result = []) => {
for (let i = 0, length = arr.length; i < length; i++) {
const value = arr[i];
if (Array.isArray(value)) {
flattenArr(value, result);
} else {
result.push(value);
}
}
return result;
};
function sum(arr) {
// const flattenArr = arr.flat(2);
const flattenedArr = flattenArr(arr);
let sum = 0;
for (let i = 0; i < flattenedArr.length; i++) {
const num = flattenedArr[i];
if(typeof num === "number") {
sum += num;
} else {
// not number
const num_ = parseInt(num);
if(isNaN(num_)) {
let findNumInString = num.match(findNumInStringRegex);
// console.log(num_, num, findNumInString, parseInt(findNumInString));
if(findNumInString) findNumInString = parseInt(findNumInString);
sum += findNumInString;
} else {
sum += num_;
}
}
}
return sum;
}
const out = sum([1, 'x', '2x', ['3', ['x2', '5']]]);
console.log(out);