在数组中显示偶数和奇数

时间:2019-01-29 16:33:53

标签: javascript

给出两个数字X和Y,编写一个函数: 1.返回X和Y之间的偶数,如果X大于Y,否则返回x和y之间的奇数 例如,取整数10和2。该函数将返回2到10之间的所有偶数

我是JavaScript的新手,这是我到目前为止尝试过的。

const number_game = (x, y) => {


// Code here

  let numArray = [];

  let numArray2 = []

  if(x < y){

        for (i=x+1; i<y; i++) {
            if (i%2 != 0) {
                numArray.push(i);
            }else {
              numArray2.push(i)
            }
        }
    }

  else{

    if(x > y){

      for (i=y+1; i<x; i++) {
            if (i%2 != 0) {
                numArray.push(i);
            }else {
              numArray2.push(i)
            }
        }
    }
    } return numArray

 }

我在下面收到此错误

预期[ Array(9) ] to deeply equal [ Array(11) ]

6 个答案:

答案 0 :(得分:0)

首先在if语句中将变量x和y相互比较。当x更大时,偶数的for循环从y到x。如果发现该数字可被2整除,则将其放入数组中。如果y> x,则奇数的for循环从x到y。如果数字不能被2整除,则表示它是奇数,并将其压入数组。打印阵列。

var x=2;
var y=10;
arr=[];
if(x>y)
{
  for(let i=y;i<x;i++)
  {
    if(i%2==0)
    arr.push(i);
  }
}
else
{
  for(let i=x;i<y;i++)
  {
    if(i%2==1)
    arr.push(i);
  }
}
console.log(arr)

答案 1 :(得分:0)

告诉我是否有效。我添加了解释

function number_game(x,y){
    let resultArr = []; //The array which will be returned
    //To return all even numbers x and y
    if(x>y){
        //checks if y(smaller number) and make it even
        if(y % 2 != 0 ) y+=1
        //Now y is even and by add 2 each loop it will get all even to result arr
        for(let i = y;i<x;i+=2){
            resultArr.push(i);
        }
    }
    //To return all even odd x and y
    else{
        //checks if x(smaller number) and odd it even
        if(x % 2 == 0 ) x+=1
        //Now x is odd and by add 2 each loop it will get all odds to result arr
        for(let i = x; i<y; i+=2){
            resultArr.push(i);
        }
    }
    return resultArr;

}
console.log(number_game(2,10)) //[3, 5, 7, 9]
console.log(number_game(10,2)) //[2, 4, 6, 8]

答案 2 :(得分:0)

因此,这里的想法是首先我们检查startend。 如果start小于end且比内部条件小,则检查start是否为偶数,如果为偶数,则将其保持原样,否则将其加1。 在while循环中,我们继续将start推到最终输出,并加2开始,直到小于end。否则我们检查奇数和休息过程是否相同。

function giveMeNumbers(start,end){
  let op = []
  if(start < end) {
    start = start % 2 ? start++ : start;
    while(start < end){
      op.push(start);
      start+=2
    }
  } else {
    end = end%2 ? end : end++;
    while(start > end){
      op.push(end);
      end+=2
    }
  }
  
  return op;
}

console.log(giveMeNumbers(1,11))
console.log(giveMeNumbers(22,10))

答案 3 :(得分:0)

如果返回 x> y 所有偶数数字,否则返回 x 所有奇数数字返回

const number_game = (x, y) => {
    let range;
    if (x > y) {
        range = Array(x - y + 1).fill().map((_, idx) => y + idx)
        return range.filter(num => !(num % 2))
    } else{
        range = Array(y - x + 1).fill().map((_, idx) => x + idx)
        return range.filter(num => (num % 2))
    }
}

console.log('x > y ', number_game(22,10)); // [ 10, 12, 14, 16, 18, 20, 22 ]​​​​​
console.log('x < y ', number_game(2,10)); // ​​​​​[ 3, 5, 7, 9 ]​​​​​

答案 4 :(得分:0)

这是使用Generator s的解决方案:

function * generateNumbers (start, stop) {
  let x = start;
  while(x <= stop) {
    yield x;
    x = x + 1;
  }
}

function * filterGen (f, gen) {
  for (const x of gen) {
    if (f(x)) { yield x; }
  }
}

const isEven = x => x % 2 === 0;
const isOdd = x => !isEven(x);

const makeNum = (a, b) => {
  if (a <= b) {
    return [...filterGen(isEven, generateNumbers(a, b))];
  }
  return [...filterGen(isOdd, generateNumbers(b, a))];
}


console.log('Evens 1 through 10:', makeNum(1, 10));
console.log('Odds 1 through 10:', makeNum(10, 1));

generateNumbers函数产生startstop之间所有整数的序列。例如:

generateNumbers(1, 3); // -> 1, 2, 3

然后将生成的生成器传递到filterGen中,它本身又是生成器。 filterGen接受一个函数和另一个生成器,并且仅yield保留(谓词)函数为其返回true的值。

filterGen(x => x === 2, generateNumbers(1, 3)); // -> 2

isEvenisOdd只是filterGen函数的谓词函数。

makeNum内部(尽管应为makeNumbers),仅检查传入的a是否小于或等于b并产生新的{{1} }从已过滤的整数序列。

答案 5 :(得分:0)

这是我为您提供解决方案的方法,解释在代码内,我已尽力简化了代码,欢迎提出任何建议。

const number_game = (x, y) =>
{
    let arr = [];

    // Depending of x > y condition, create the test method.
    // "test" will be a function that will check for even
    // number when x > y, otherwise will check for odd numbers.
    
    let test = (x > y) ? (n) => !Boolean(n % 2) : (n) => Boolean(n % 2);

    // Based on x > y condition, define the init and end number.

    let [init, end] = (x > y) ? [y, x] : [x, y];
    !test(init) && init++;

    // Generate evens/odds number between init and end.

    while (init <= end)
    {
        arr.push(init), init += 2;
    }

    return arr;
}

// Test cases.

console.log(JSON.stringify(number_game(1, 10)));
console.log(JSON.stringify(number_game(10, 1)));
console.log(JSON.stringify(number_game(10, 0)));
console.log(JSON.stringify(number_game(-3, 13)));
console.log(JSON.stringify(number_game(9, 9)));
console.log(JSON.stringify(number_game(9, 8)));