Javascript четный и нечетный диапазон - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь решить онлайн-викторину, но я не могу пройти все тесты.вот вопрос

Учитывая два числа X и Y, напишите функцию, которая: 1 возвращает четные числа между X и Y, если X больше, чем Y, иначе возвращает нечетные числа между x и y. Например, взятьцелые числа 10 и 2.функция вернет все четные числа от 2 до 10.

Примеры:

12, 0 => [2,4,6,8,10]

2, 12 => [3, 5, 7, 9, 11]

0, 0 => []

Вот мой код:

    function number_game(x, y){
      let numbers = [];

      if (x > y){
        for (let i = y; i <= x; i++){
          if (i > y){
            numbers.push(i);
          }
        }
      }else{
        for (let i = x; i <= y; i++){
          if (i > x){
            numbers.push(i);
        }
      }
    }

      const result = numbers.filter(function(num){
        return x > y ? num % 2 === 0: num % 2 === 1;
      });
      return result;
  }

Ответы [ 6 ]

0 голосов
/ 22 апреля 2019
function number_game(x, y) {
    var numArray = new Array();
    if (x > y) {
        for (i=y+1; i<x; i++) {
            if (i%2 == 0) {
                numArray[numArray.length] = i;
            }
        }
    } else {
        for (i=x+1; i<y; i++) {
            if (i%2 != 0) {
                numArray[numArray.length] = i;
            }
        }
    }
    return numArray;
}
0 голосов
/ 18 февраля 2019
function returnOddOrEven(x,y){

// return empty array if both x and y are equal to 0

let mixedArr = [];
if (x ===0 && y===0){
   return [];
}


// first condition of x greater than y
else if ( x > y){
   for (var i = 1; i < x; i++){
         if( i % 2 === 0){
           mixedArr.push(i)
         }
   }
   }

   // second condition of y > x
   else if( y > x){
     for (var i = 1; i < y; i++){
         if(i > 1 && i % 2 === 1){
           mixedArr.push(i)
         }
   }

}

return mixedArr;
} 
0 голосов
/ 03 октября 2018

Вместо генерации всех чисел и их фильтрации вы можете сгенерировать только те числа, которые вам нужны:

function number_game(x, y) {  
  const start = Math.min(x, y);
  const end = Math.max(x, y);
  const base = x > y ? 2 - start % 2 : start % 2 + 1; // how much you need to add, to get from start to the first number in the result
  const numbers = [];
  
  for(let i = start + base; i < end; i+= 2) numbers.push(i);
  
  return numbers;
}

console.log(JSON.stringify(number_game(9, 1)));
console.log(JSON.stringify(number_game(1, 9)));
console.log(JSON.stringify(number_game(12, 2)));
console.log(JSON.stringify(number_game(2, 12)));
console.log(JSON.stringify(number_game(12, 1)));
console.log(JSON.stringify(number_game(1, 12)));
console.log(JSON.stringify(number_game(2, 2)));
0 голосов
/ 03 октября 2018

Потому что я чертовски любитель игры в код:

const number_game = (x, y) => {
  const min = Math.min(x, y), max = Math.max(x, y);

  return Array.from(Array(max - min), (_, i) => i + min).slice(1)
    .filter(v => v % 2 == (x < y));
};
0 голосов
/ 02 октября 2018

Возможно, что-то подобное может помочь.

function number_game(x, y) {
      let result = [];
      let min=0, max=0;
      if(x==y) {
        return result;
      } else if (x > y) {
          min = y;
          max = x;
      } else {
          min = x;
          max = y;
      }
      
        for (let i = min; i <= max; i++){
          if (i%2===0 && x > y && i!=min && i!=max) {
            result.push(i);
          }
          if (i%2===1 && x < y && i!=min && i!=max) {
            result.push(i);
          }
        }

      return result;
  }
  console.log(number_game(12,0));
  console.log(number_game(2,12));
  console.log(number_game(0,0));
  console.log(number_game(13,1));
  console.log(number_game(3,13));
  console.log(number_game(1,1));
  console.log(number_game(1,1000));
  console.log(number_game(3,1300));
0 голосов
/ 02 октября 2018

Несмотря на то, что код написан не оптимально, ваш код, по сути, в порядке, за исключением того, что он содержит большее число в результате.Вы пропускаете меньшее число с помощью теста if (i > y), хотя было бы проще просто начать цикл с y + 1.

Чтобы исключить более высокое число, просто измените критерии повторения с <=<.

Было бы также проще выполнить четный или нечетный тест в этих циклах.

function number_game(x, y) {
  let numbers = [];

  if (x > y) {
    for (let i = y + 1; i < x; i++) {
      if (i % 2 == 0) {
        numbers.push(i);
      }
    }
  } else {
    for (let i = x + 1; i < y; i++) {
      if (i % 2 == 1) {
        numbers.push(i);
      }
    }
  }

  return numbers;
}

console.log(number_game(12, 0));
console.log(number_game(2, 12));
console.log(number_game(0, 0));
console.log(number_game(3, 13));
console.log(number_game(1, 1));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...