繁体   English   中英

在数组中显示偶数和奇数

[英]displaying even and odd numbers in an array

给定两个数字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) ]

首先在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) 

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

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]

所以这里的想法是首先我们检查startend 如果start小于end ,如果我们检查的条件比内start它是否是与否如果连我们保持它,因为它是如果不是我们把它加1。 在while循环中,我们继续将start推到最终输出,并将2加到start,直到小于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)) 

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

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 ]​​​​​

这是使用Generator的解决方案:

 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 s(谓词)函数返回true

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

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

makeNum (应该为makeNumbers )内部,仅检查传入的a是否小于或等于b并根据过滤后的整数序列生成一个新的Array

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM