在JavaScript中返回动态范围之间的偶数和奇数

时间:2018-09-27 13:54:33

标签: javascript arrays

我正在尝试编写一个包含两个参数a和b的代码(函数),如果a大于b,则返回a和b之间的所有偶数,否则应返回a和b之间的奇数。

这是我的代码。

function number_ranges (a, b) {

    let numbers = [];

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

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

我想看到一种不同的方法,因为我似乎无法通过所有测试用例

2 个答案:

答案 0 :(得分:1)

我使用了此功能f=(a,b)=>[...ArrayMath.max(a,b))].map((q,i)=>i).filter(z=>(a<b?!(z%2):z%2)&&z>=Math.min(a,b))

我首先创建一个从1到b的范围,如下[...Array(Math.max(a,b))].map((q,i)=>i)

然后我用a<b?!(z%2):z%2进行过滤。如果大于b,则a保持偶数,否则保持几率。

我还使用&&z>=Math.min(a,b)

仅保留那些大于或等于第一个参数的数字。

f=(a,b)=>[...Array(Math.max(a,b))].map((q,i)=>i).filter(z=>(a<b?!(z%2):z%2)&&z>=Math.min(a,b))
console.log(f(10, 5))
console.log(f(5, 10))

答案 1 :(得分:1)

您可以执行一个单循环并检查该值是否为偶数,或与该订单的检查相结合。

function getEvenOdd(a, b) {
    var inc = +(a < b) || -1,
        i,
        result = [];
     for (i = a; i !== b + inc; i += inc) {
         if (+(inc === 1) !== i % 2) {
             result.push(i);
         }
     }
     return result;
}

// even
console.log(getEvenOdd(3, 10).join(' ')); // [4, 6, 8, 10]
console.log(getEvenOdd(4, 10).join(' ')); // [4, 6, 8, 10]
console.log(getEvenOdd(3, 9).join(' '));  // [4, 6, 8]
console.log(getEvenOdd(4, 9).join(' '));  // [4, 6, 8]

// odd
console.log(getEvenOdd(10, 3).join(' ')); // [9, 7, 5, 3]
console.log(getEvenOdd(10, 4).join(' ')); // [9, 7, 5]
console.log(getEvenOdd(9, 3).join(' '));  // [9, 7, 5, 3]
console.log(getEvenOdd(9, 4).join(' '));  // [9, 7, 5]