给出两个数字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) ]
答案 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)
因此,这里的想法是首先我们检查start
和end
。
如果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
函数产生start
和stop
之间所有整数的序列。例如:
generateNumbers(1, 3); // -> 1, 2, 3
然后将生成的生成器传递到filterGen
中,它本身又是生成器。 filterGen
接受一个函数和另一个生成器,并且仅yield
保留(谓词)函数为其返回true
的值。
filterGen(x => x === 2, generateNumbers(1, 3)); // -> 2
isEven
和isOdd
只是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)));