【问题标题】:Loop to determine whether digits of a number meet a condition (Javascript)循环确定数字的数字是否满足条件(Javascript)
【发布时间】:2018-12-17 18:00:30
【问题描述】:

所以,我正在尝试创建一个函数来确定一个数字是否“整齐”。 (即给定整数中的每个数字都大于它之前的数字。)

我已经成功地将整数转换为数组。但是当我遍历它时,我没有得到想要的truefalse,如果不是这样。我想知道我做错了什么?

function tidyNumber(n){
  var arr = n.toString(10).split("").map(function(t){return parseInt(t)});
  let tof;

  if(arr.length == 1){
    return true;
  }

  for(i = 0; i < arr.length; i++){
    if(arr[i] <= arr[i+1]){
      tof = true;
    } else if(arr[i] > arr[i+1]){
      tof = false;
   }
  }
  return tof;
}

【问题讨论】:

  • iarr.length - 1 时,比较会将arr[i]undefined 进行比较。
  • arr[i] &gt; arr[i+1] 时应该立即返回 false,因为使用您的算法,1324 的数字会很整齐

标签: javascript loops for-loop if-statement


【解决方案1】:

您只能检查前一个数字是否大于实际数字并使用false 退出函数。

那么您需要从索引1 开始,并防止检查未给定的索引。

function tidyNumber(n) {
    var arr = Array.from(n.toString(), Number),
        i;                                      // declare, otherwise its a global variable

    for (i = 1; i < arr.length; i++) {
        if (arr[i - 1] > arr[i]) return false;
    }
    return true;
}

console.log(tidyNumber(1234));     //  true
console.log(tidyNumber(1));        //  true
console.log(tidyNumber(1223334));  //  true
console.log(tidyNumber(51223334)); // false

【讨论】:

    【解决方案2】:

    回答您的问题:您的函数未返回所需结果的原因是它仅返回 tof 的最后一个值。所以你的函数目前只报告数字的最后两位是否整齐。以@Seblor 为例,1324

    1. 首先,代码会检查是否1 &lt; 3并设置tof = true
    2. 接下来会检查3 &lt; 2是否设置tof = false
    3. 接下来会检查是否2 &lt; 4并设置tof = true。这会删除您正在寻找的实际结果。
    4. 顺便说一句,代码最终会检查是否4 &lt; undefined(如@Pointy 所述)但不会更改tof 的值,因为这两个条件表达式都不满足。

    您可以通过在tof = false 时立即返回false 结果来实现所需的行为(正如@nina-scholz 建议的那样)。以下是您的代码中的样子:

    function tidyNumber(n){
      var arr = n.toString(10).split("").map(function(t){return parseInt(t)});
      let tof;
    
      if(arr.length == 1){
        return true;
      }
    
      for(i = 0; i < arr.length; i++){
        if(arr[i] <= arr[i+1]){
          tof = true;
        } else if(arr[i] > arr[i+1]){
          tof = false;
          return tof; // <-- Added return statement here
       }
      }
      return tof;
    }
    

    希望对你有帮助!

    【讨论】:

    • 谢谢大家。这太棒了!我真的很感激。
    • 很高兴你这么认为,@thelacaning!请将其中一个答案标记为“已接受”答案。
    • 感谢@thelacaning 标记已接受的答案 - 表示感谢/赞赏的另一种方式是对您认为有帮助的所有答案进行投票。编码愉快!
    【解决方案3】:

    试试这样:

    function tidyNumber(n){
        current = 0;
        while(n){
            if(current > n % 10){
                return false;
            }
            current = n % 10;
            n = parseInt(n / 10);
        }
        return true;
    }
    

    这个想法是通过“% 10”得到除以 10 的余数。这将得到最后一个数字。看看它是否比前一个小,否则循环直到数字为零!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多