Ребята, здравствуйте.
Делаю задания на codewars, не могу понять, почему последняя итерация reduce возвращает конкатенацию вместо сложения.
function digital_root(n) {
// ...
n = n.toString().split('');
console.log('n', n)
n = n.reduce( function(total, current){
console.log(parseFloat(total), parseFloat(current));
console.log('parseFloat(total) + parseFloat(current)', Number(total) + Number(current))
return Number(total) + Number(current);
})
if (n.toString().split('').length > 1) {
digital_root(n)
}
return n
}
console.log(digital_root(132189));
В приведенном коде результат рекурсии нигде не используется.
На самом деле 24 - это не склейка 2 и 4, а сумма цифр 132189, просто из-за кучи console.log возникла путаница что где выводится.
Для решения достаточно возвращать результат рекурсии, если на текущей итерации получилось число с несколькими цифрами
function digital_root(n) {
// ...
n = n.toString().split('');
console.log('n', n)
n = n.reduce(function(total, current) {
console.log(parseFloat(total), parseFloat(current));
console.log('parseFloat(total) + parseFloat(current)', Number(total) + Number(current))
return Number(total) + Number(current);
})
if (n.toString().split('').length > 1) {
return digital_root(n)
}
return n
}
console.log(digital_root(132189));
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости