reduce в digital_root

211
12 марта 2018, 01:09

Ребята, здравствуйте. Делаю задания на 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));

Answer 1

В приведенном коде результат рекурсии нигде не используется.

На самом деле 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));

READ ALSO
Как сделать вход с помощью LinkedIn?

Как сделать вход с помощью LinkedIn?

Доброго времени суток, на сайте нужно сделать кнопку входа через LinkedInСделал как тут написано

190
задачка из учебника learn.javascript.ru на тему insertBefore и appendChild

задачка из учебника learn.javascript.ru на тему insertBefore и appendChild

Напишите функцию insertAfter(elem, refElem), которая добавит elem после узла refElemкак я понимаю нужно вставить elem после первого дива на странице(между двух...

177
Помогите допилить скрипт к Google Таблицам используя API

Помогите допилить скрипт к Google Таблицам используя API

Нужно составить книгу заявок биржи в виде Google Таблицы - данные из парсинга распределить по колонкам и строчкам, используя скрипт с Public API биржи

218
перемещение drag and drop и изменение размеров

перемещение drag and drop и изменение размеров

Не могу сделать так что бы drag and drop срабатовало менялся размер по отдельности все работает а вместе только drag and drop срабатывает

226