首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何调整此函数以将两位数减少到一位数?

如何调整此函数以将两位数减少到一位数?
EN

Stack Overflow用户
提问于 2019-11-15 08:50:12
回答 2查看 78关注 0票数 1

我有一个函数,它从输入字段中获取数字,并对它们求和。但是,我希望方程继续将总和相加,直到结果是一个数字。我觉得在这里的某个地方我需要一个if语句,但是我不确定如何写它。我可以对如何修改这个规范有一些建议吗?

代码语言:javascript
复制
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;
}
代码语言:javascript
复制
<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>
EN

回答 2

Stack Overflow用户

发布于 2019-11-15 08:58:37

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

代码语言:javascript
复制
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循环,你也可以使用递归:

代码语言:javascript
复制
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进行更手动的迭代,则可以替换它,但它会使函数变得更长且不那么抽象:

代码语言:javascript
复制
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);

票数 4
EN

Stack Overflow用户

发布于 2019-11-15 09:27:45

我将使用replace删除日期中的-,将其拆分成一个数组,通过该数组映射到parseInt,然后使用reduce将它们相加:

代码语言:javascript
复制
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;
    })
  }
}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58868758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档