我哪里错了?在返回单个数字之前添加尝试打印没有数字的数字

时间:2017-11-24 00:51:07

标签: javascript arrays

function AdditivePersistence(num) {
    var count = 0;
    while (num.toString().length > 1) {
        count++;
        var num = calcVal(num);

    }
    return count;

    function calcVal(str) {
        var sum = 0;
        var arr = str.toString().split("");
        for (var i of arr) {
            sum = sum + arr[i];
        }
        return parseInt(sum.toString());
    }
}

console.log(AdditivePersistence(2233));

calcValue函数返回数组的总和,while循环重复,直到返回的数字长度为1。

1 个答案:

答案 0 :(得分:0)

当你使用...时,i是数字而不是数字的索引。另外你需要解析数字。

  sum = sum + parseInt(i, 10); // i is the number, not the index

由于您使用i作为索引,因此calcVal()的结果始终为长度为>的字符串。 2,这意味着你的情况下是一个无限循环。

固定代码:

function AdditivePersistence(num) {
  var count = 0;
  
  while (num.toString().length > 1) {
    count++;
    num = calcVal(num);
  }
  
  return count;

  function calcVal(str) {
    var sum = 0;
    var arr = str.toString().split("");

    for (var i of arr) {
      sum = sum + parseInt(i, 10); // i is the number, not the index
    }
    
    return sum;
  }
}

console.log(AdditivePersistence(2233));