Цикл, чтобы определить, соответствуют ли цифры числа условию (Javascript) - PullRequest
0 голосов
/ 17 декабря 2018

Итак, я пытаюсь создать функцию, которая определяет, является ли число «аккуратным».(т.е. каждая цифра в данном целом числе больше, чем та, что была до него.)

Мне удалось преобразовать целое число в массив.Но когда я зацикливаюсь на нем, я не получаю желаемые true для аккуратности и false, если нет.Мне интересно, что я делаю не так?

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;
}

Ответы [ 3 ]

0 голосов
/ 17 декабря 2018

Попробуйте вот так:

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

Идея состоит в том, чтобы "% 10" получить остаток от деления на 10. Это даст вам последнюю цифру.Посмотрите, меньше ли он, чем предыдущий, иначе зацикливайтесь, пока число не станет равным нулю!

0 голосов
/ 17 декабря 2018

Чтобы ответить на ваш вопрос: причина, по которой ваша функция не возвращает желаемый результат, состоит в том, что она возвращает только последнее значение tof.Таким образом, ваша функция в настоящее время только сообщает, аккуратны ли последние две цифры номера.Чтобы использовать пример @Seblor, 1324:

  1. Сначала код проверяет, является ли 1 < 3 и установлен ли tof = true.
  2. Далее он проверит, является ли 3 < 2 и установить tof = false.
  3. Далее, он проверит, будет ли 2 < 4 и установить tof = true.Это стирает фактический результат, который вы искали.
  4. Кстати, код, наконец, проверит, действительно ли 4 < undefined (как упомянуто @Pointy), но не изменит значение tof, поскольку ни одно условное выражение не было удовлетворено.

Вы можете достичь желаемого поведения, возвращая результат false немедленно, когда tof = 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;
}

Надеюсь, это поможет!

0 голосов
/ 17 декабря 2018

Вы можете проверить, только если предыдущая цифра больше, чем фактическая цифра, и выйти из функции с помощью 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...