постоянно добавлять значения в JavaScript с помощью цикла - PullRequest
0 голосов
/ 10 мая 2018

Я новичок в Javascript, поэтому, пожалуйста, потерпите меня за этот основной вопрос,

Я пытаюсь заставить мою функцию добавлять все отдельные цифры в строку вместе, а затем продолжать делать этопока у меня не останется одна цифра!

3253611569939992595156

113 // result of the above digits all added together

5 //result of 1+1+3

Я создал цикл while, но он складывает числа только один раз, он не повторяется до одной цифры, и я не могупонять почему!

function rootFunc(n) {
  var splite = n.toString().split('').map(x => Number(x)); //converts the number to a string, splits it and then converts the values back to a number

  while (splite.length > 1) {
    splite = splite.reduce(getSum);
  }

  return splite;
}

console.log(rootFunc(325361156993999259515));

function getSum(total, num) {
  return total + num;
}

Ответы [ 3 ]

0 голосов
/ 10 мая 2018

Проблема в том, что вы возвращаете результат после первого сращивания.Вам нужно иметь рекурсивную функцию.Для этого вы можете поставить это перед возвратом:

  if(splite > 9) splite = rootFunc(splite);

Таким образом, вы проверяете, больше ли результат, чем 10, если не выполняете функцию с оставшимися цифрами

0 голосов
/ 10 мая 2018

Я просматривал это в jsfiddle, и ваш номер не передается с точной точностью, поэтому просто войдите в консоль n, как только вы вызовете rootFunc, вы уже потеряли данные.В противном случае, чтобы исправить ваш цикл, вам нужно переназначить split в строку до конца вашего кодового блока, так как ваш оператор while проверяет .length, который должен вызываться для строки.Поместите этот кусок кода в конце блока: splite = splite.toString().split('').map(x =>Number(x));

0 голосов
/ 10 мая 2018

Вы правильно сокращаете, но то, что вы не делаете, это повторное разделение.Попробуйте разбить это на отдельные функции:

function digits(n) {
  return n.toString().split('').map(x =>Number(x));
}

Затем разделить каждый раз:

function rootFunc(n) {
  var d = digits(n);
  while (d.length > 1) {
    d = digits(d.reduce(getSum));
  }

  return d;
}
...