【问题标题】:How do I pass a variable into a JS while loop?如何将变量传递给 JS while 循环?
【发布时间】:2019-08-13 21:58:45
【问题描述】:

我想对一个整数进行递归求和:将一个整数拆分为一个数组,然后对各个项目求和,直到剩下一个整数数组。

这是我的逻辑:

  1. 取一个整数 (n) 并将其拆分为一个数组。
  2. 将所有单独的数字相加。
  3. 数字是否大于 9?
    1. 是:重复步骤 1 和 2
    2. 否:返回号码
function digital_root(n) {
  let digits = (""+n).split("").map(Number);
  while (digits.length > 1) {
    let result = digits.reduce((sum, int) => sum + int);
    let digits = (""+result).split("").map(Number);
  }
  return digits;
};

这是我的 Node.js 向我抛出的错误代码(在上面示例代码的第 4 行):

ReferenceError: digits is not defined
    at digital_root (repl:6:18)

我假设变量 digits 可以在 while 循环的范围内访问,但显然,我似乎错了?有人可以在这里为我提供一些见解吗?


编辑:谢谢大家的帮助!我已经解决了这个问题。 为了您的好奇,这是我的算法背后的数学形式: http://mathworld.wolfram.com/DigitalRoot.html

它也可以在一行中解决:

function digital_root(n) {
  return (n - 1) % 9 + 1;
}

【问题讨论】:

  • 这可能意味着digits 没有值。在 while 循环之前执行console.log(digits)
  • 该变量可以在我检查过的函数中访问。它只是在 while 循环中不可访问。
  • 删除循环内的 let 。你定义了两次。

标签: javascript while-loop


【解决方案1】:

不要以这种方式设置digits,循环内的digits前面不应有let,因为您已经在循环外定义了digits

这将为您提供您期望的结果:

digital_root = n => (Array.from(`${n}`)).reduce((sum, val) => sum + ~~val, 0);


console.log(digital_root(12345));

希望这会有所帮助,

【讨论】:

    【解决方案2】:

    问题是 let 关键字,因为 let 具有块级范围,“数字”未在 while 循环开始时定义

    在 while 循环中删除 let for 数字

    function digital_root(n) {
      let digits = (""+n).split("").map(Number);
      while (digits.length > 1) {
        let result = digits.reduce((sum, int) => sum + int);
        digits = (""+result).split("").map(Number);
      }
      return digits;
    }
    
    console.log(digital_root(47))

    【讨论】:

      【解决方案3】:

      应删除数字的内部 let(第 5 行)

      function digital_root(n) {
        let digits = (""+n).split("").map(Number);
        while (digits.length > 1) {
          let result = digits.reduce((sum, int) => sum + int);
          digits = (""+result).split("").map(Number);
        }
        return digits;
      }
      

      【讨论】:

        猜你喜欢
        • 2023-04-07
        • 2019-11-29
        • 2014-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多