gpt4 book ai didi

javascript - 我如何调整此功能以将两位数减少到一位数?

转载 作者:行者123 更新时间:2023-11-30 09:11:07 24 4
gpt4 key购买 nike

我有一个函数,它从输入字段中获取数字,并对它们求和。但是,我希望等式继续将总和加在一起,直到结果是一个数字。我觉得我在这里的某处需要一个 if 语句,但我不确定如何编写它。我可以就如何修改此代码提出一些建议吗?

function getSum() {
const input = document.getElementById('dateInput').value;
var sum = 0;
for (var i = 0; i < input.length; i++) {
const num = parseInt(input.charAt(i));
if (!isNaN(num)) {
sum += num;
}
}
document.getElementById("result").textContent = "Your life path number is: " + sum;
}
<div class="container">
<div class="cell-1"><input type="date" id="dateInput"></div>
<div class="cell-2"><h1>Blah Blah</h1></div>
<div class="cell-3"><input type="date" id="dateInput"></div>
<div class="cell-4" id="result"></div>
<div class="cell-5"><button onclick="getSum()">Calculate</button></div>
<div class="cell-6"></div>
<div class="cell-7"></div>
<div class="cell-8"></div>
<div class="cell-9"></div>
</div>

最佳答案

一种选择是使用 while 循环:当计算的数字为 10 或以上时,继续迭代并计算一个新数字:

const sumNumber = num => [...String(num)].reduce(
(a, digit) => a + Number(digit),
0
);

function getSum(input) {
const inputNum = Number(input);
if (Number.isNaN(inputNum)) {
return;
}
let currentSum = inputNum;
while (currentSum >= 10) {
currentSum = sumNumber(currentSum);
}
console.log(currentSum);
}
getSum(15);
getSum(1234);
getSum(999999);

如果你不喜欢while循环,你也可以使用递归:

const sumNumber = num => {
const currentSum = [...String(num)].reduce(
(a, digit) => a + Number(digit),
0
);
return currentSum < 10 ? currentSum : sumNumber(currentSum);
}

function getSum(input) {
const inputNum = Number(input);
if (Number.isNaN(inputNum)) {
return;
}
let currentSum = inputNum;
console.log(sumNumber(inputNum));
}
getSum(15);
getSum(1234);
getSum(999999);

总而言之,我真的更喜欢 reduce 方法,因为它不涉及重新分配外部变量,但您可以用对 charAt< 的更多手动迭代来替换它 输入字符串的代码,如果您对此更满意的话,但它会使函数变得更长且不那么抽象:

const sumNumber = num => {
const numStr = String(num);
let sum = 0;
for (var i = 0; i < numStr.length; i++) {
const num = parseInt(numStr.charAt(i));
if (!isNaN(num)) {
sum += num;
}
}
return sum;
};


function getSum(input) {
const inputNum = Number(input);
if (Number.isNaN(inputNum)) {
return;
}
let currentSum = inputNum;
while (currentSum >= 10) {

currentSum = sumNumber(currentSum);
}
console.log(currentSum);
}
getSum(15);
getSum(1234);
getSum(999999);

关于javascript - 我如何调整此功能以将两位数减少到一位数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58868758/

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