在javascript中实现单个迭代

ruyhziif  于 2021-09-23  发布在  Java
关注(0)|答案(1)|浏览(308)

因此,我提出了一个在线测试问题,类似这样:
编写一个函数来检查给定值是否为一位数字。如果不是,则将所有数字相加,直到变成一个位数。例如,给定值为55555,结果为25。当2和5相加时,将得到7。
我的回答是:

function createCheckDigit(membershipId) {
  let sum = 0;
  let array = membershipId.toString().split("")
  if(array.length > 1){
    for(let i = 0; i < array.length; i++){
      sum = sum + parseInt(array[i]);
    }
  }
  if(sum.toString().split("").length > 1){
    return createCheckDigit(sum.toString())
  } else {
    return sum
  }
}

console.log(createCheckDigit("55555"));

这个问题的目标是:
测试用例答案=7(完成)
需要单次迭代(需要)
需要两次迭代(完成)
需要多次迭代(完成)
我成功地完成了1、3、4,但没有完成2。我不知道单次迭代应该进行哪一部分?

pxyaymoc

pxyaymoc1#

我想我已经找到了解决问题的办法:

function checkDigit(v) {
    let sum = 0;
    const digits = v.toString().split("");
    for (let i = 0; i < digits.length; ++i) {
        sum += Number(digits[i]);
        if (sum >= 10) {
            sum -= 9; // same as (sum - 10) + 1; this works because we won't ever get a sum greater than 9+9=18 so the sum of those digits will be a single digit
        }
    }

    return sum;
}

console.log(checkDigit('55555'));
console.log(checkDigit('2'));
console.log(checkDigit('12345'));
console.log(checkDigit('99999'));
console.log(checkDigit('775542'));

相关问题