gpt4 book ai didi

javascript - 理解另一个添加数字数字的 Javascript 片段

转载 作者:行者123 更新时间:2023-12-01 04:05:30 27 4
gpt4 key购买 nike

虽然这个问题的答案here由于递归方面,这是最好的答案,

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] 时,它会返回一个错误。另外,使用“sum + =”,它应该像这样相加:0 + 1 + 7 + 5。因此总和是13。接下来,

numbers.splice(0, 1);

这是我不明白的部分。我知道 .splice 可以添加或删除项目。比如(0,1)的第一部分,也就是“0”,找到数组的位置,换句话说,“0”找到数组中“1”之前的第一个位置 = [1, 7 ,5]。最后一部分“1”指定要删除的项目数量。换句话说,它要求从数组中删除“1”,导致现在数组变为 [7, 5]。但是,我认为根本不需要,因为不需要从号码中删除任何数字。另外,我不明白评论说当总和应该是 13 时,这一行会从总和中删除“0”?接下来,

sumDigits(numbers.join(''));

这应该将数组元素连接成一个字符串。换句话说,它应该将 array = [1, 7, 5] 连接成“1, 7, 5”。不过,我不明白为什么当这一行 (sum += parseInt(numbers[0])) 将字符串转换回数字并将数字相加时需要这两行(.splice 和 .join)。然而,当我删除这两行时,该功能不起作用......

请帮助我了解它是如何工作的以及哪个先执行等等...

最佳答案

哇,这个 react 很聪明!我会尝试解释一下:假设我们有字符串“3432”

第一次运行该函数时,我们将拆分它:

numbers = ['3','4','3','2']

然后在这个循环中,我们将完成该过程中最微妙的部分,让我们看看:

while(numbers.length > 0) { //actually the condition here is number array has to have at least 1 element, we'll see why
sum += parseInt(numbers[0], 10); // covert string to number and force the number to be decimal and add the next number
//so sum = 0+3
numbers.splice(0, 1); //remove the first digit, in other words, removing "0" from sum, i think?
//then here you're right, we remove the first digit so that
number = ['4','3','2']
sumDigits(numbers.join('')); //join the array element into a string
//and here we call recursively sumDigits passing "432" in arguments
/* so next time sum = 3+4, number = ['3','2'] and then
we will call sumDigits again with "32" as arguments
and then sum = 7+3, number = ['2'], and then
we will call sumDigits again with "2" as arguments
and then sum = 10+2 and number = [] and then we will call sumDigits again passing it "" and at that time the while loop break */

}

关于javascript - 理解另一个添加数字数字的 Javascript 片段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41859865/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com