Хотя этот ответ на этот вопрос here был наилучший ответ из-за рекурсии аспекте,Понимание другого фрагмента кода Javascript, который добавить цифры из числа
function sumDigits(number) {
var remainder = number % 10;
var sum = remainder;
if(number >= 10) {
var rest = Math.floor(number/10);
sum += sumDigits(rest);
}
return sum;
}
был другой ответ, который, кажется, легче понять. Однако были некоторые части ответа, которые я не понимаю.
function sumDigits(number) {
var sum = 0;
var numbers = number.toString().split(""); //turn the number to string and split the number in several digits
while(numbers.length > 0) {
sum += parseInt(numbers[0], 10); // covert string to number and force the number to be decimal and add the next number
numbers.splice(0, 1); //remove the first digit, in other words, removing "0" from sum, i think?
sumDigits(numbers.join('')); //join the array element into a string
}
return sum;
}
var sum = sumDigits(175);
$('#result').html(sum);
Вот что я был в состоянии понять:
var numbers = number.toString().split("");
преобразовать число в строку и разбить строку на массив подстрок. Другими словами, если число 175, то он будет преобразован в «175» и разделить на 1, 7, 5. Далее
while(numbers.length > 0) {
Это гарантировало, что число является положительным и может быть добавлен. Однако, когда я удалил эту строку и запустил ее в JS Bin с отрицательным числом, она возвращает ошибку. Итак, так или иначе, это важно, чтобы суммировать только положительные числа. Далее
sum += parseInt(numbers[0], 10);
Это (ParseInt) преобразовать строку или в нашем случае, подстроки, обратно в цифры и добавить каждый номер к себе. Однако я не понимаю, что «0» находится в скобках после номеров , если только это не относится к первому числу в массиве = [1, 7, 5] ?? Тем не менее, я вижу, что когда я удаляю [0] из этой строки, он возвращает ошибку. Дополнительно, с «суммы + =», следует добавлять его как этот 0 + 1 + 7 + 5. Таким образом, сумма 13. Далее,
numbers.splice(0, 1);
Это та часть, которую я не Понимаю. Я знаю, что .splice либо добавляет, либо удаляет элементы. Например, первая часть (0,1), которая равна «0», находит положение массива, другими словами, «0» находит первую позицию до «1» в массиве = [1, 7 , 5]. Последняя часть, которая равна «1», указывает количество элементов, которые нужно удалить. Другими словами, он просит удалить «1» из массива, в результате чего массив будет [7, 5]. Тем не менее, я думаю, что это не нужно вообще, потому что нет необходимости удалять цифру из числа. Кроме того, я не понимаю комментарий, в котором говорится, что эта строка удаляет «0» из суммы, когда сумма должна быть равна 13? Далее,
sumDigits(numbers.join(''));
Предполагается, что это объединение элементов массива в строку. Другими словами, он должен присоединиться к массиву = [1, 7, 5] в «1, 7, 5». Тем не менее, я не понимаю, почему эти две строки (.splice и .join) необходимы, когда эта строка (sum + = parseInt (числа [0])) преобразует строку обратно в числа и добавляет цифры вместе. Однако, когда я удалить эти две строки, функция не работает ...
Пожалуйста, помогите мне понять, как это работает, и что выполнение первого и так далее ...
Почему бы не поставить пару 'console.log's туда и увидеть, что он делает? –