我有一个函数,它从输入字段中获取数字,并对它们求和。但是,我希望方程继续将总和相加,直到结果是一个数字。我觉得在这里的某个地方我需要一个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>发布于 2019-11-15 08:58:37
一种选择是使用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方法,因为它不涉及重新分配外部变量,但如果您对输入字符串的charAts进行更手动的迭代,则可以替换它,但它会使函数变得更长且不那么抽象:
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);
发布于 2019-11-15 09:27:45
我将使用replace删除日期中的-,将其拆分成一个数组,通过该数组映射到parseInt,然后使用reduce将它们相加:
function getSum() {
const input = document.getElementById('dateInput').value;
if (input) {
let stringThing = input.replace(/-/g, '').split('')
let numberThing = stringThing.map(num => parseInt(num));
document.getElementById('result').textContent = numberThing.reduce(function(acc, val) {
return acc + val;
})
}
}
https://stackoverflow.com/questions/58868758
复制相似问题