Javascript如何返回奇数的数组

时间:2017-08-08 14:23:28

标签: javascript

我正在尝试返回一组数字

    function numbers(l, r) {
      // l and r are any given numbers
      var x=[];
      var i=l;
      while(x.push(i++)<r){};
      return x;        
    }


console.log(numbers(10, 19));

到目前为止一切顺利。现在我想得到奇数。我怎样才能做到这一点?

6 个答案:

答案 0 :(得分:5)

x.filter(n => n%2)只保留奇数。

如果n为偶数,n%2将返回0,过滤器将删除该项目。

&#13;
&#13;
let arr = [1,2,3,4,5,6,7,8,9,10,11,12]

let odds = arr.filter(n => n%2)

console.log(odds)
&#13;
&#13;
&#13;

答案 1 :(得分:1)

function* numbers(start, end) {
    let i = start%2 ? start : ++start;
    while(i <= end) {
        yield i;
        i += 2
    }
}

console.log([...numbers(2, 10)])

class Odd {
    constructor(l, r) {
        this.l = l;
        this.r = r;
    }

    *[Symbol.iterator]() {
        let i = this.l % 2 ? this.l : ++(this.l);
        while (i <= this.r) {
            yield i;
            i += 2
        }
    }
}

const odd = new Odd(2,10);

console.log([...odd])

答案 2 :(得分:0)

首先,让我奇怪:

i = i+1-i%2;

然后迭代每一秒:

 while(x.push(i+=2)<r){};

请注意,这会返回 r-1 数字,而不是数字,直到r-1

更短的

var EverySecond = (start,length) => Array.from({length}).map((el,i)=>start+i*2);
var even = (start,length) => EverySecond(start+start%2,length);
var odd = (start,length) => EverySecond(start+1-start%2,length);

答案 3 :(得分:0)

每次推送都可以使用适当的起始值和2增量。

function numbers(l, r) {
    var x = [],
        i = Math.floor(l / 2) * 2 + 1; // start with an odd number

    while(i <= r) {
        x.push(i);
        i += 2;
    };
    return x;        
}

console.log(numbers(10, 19));
console.log(numbers(3, 5));
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 4 :(得分:0)

提供两个值l(起点)和r(终点),您可以创建从lr的数组,以+1为增量。使用该数组来筛选符合mod 2% 2标准的期望值。如果值是偶数,则FYI mod 2返回0,如果值是奇数,则FYI 1返回0。 filter()方法创建一个新数组,其中所有元素均通过由提供的函数(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter)实现的测试。请注意,在JavaScript中,falsy是一个n % 2值,因此仅返回正整数,如1,因此该数组由所有导致function oddNumbers(l, r) { let arr = []; while (l <= r) { arr.push(l); l += 1; }; return arr.filter(n => n % 2); } 等于1的值构成。

restframework.compat

答案 5 :(得分:-1)

试试这对:

[0,1,2,3,4].filter(function(n){ return n%2 === 0; });

试试这个赔率:

[0,1,2,3,4].filter(function(n){ return n%2 !== 0; });