我正在尝试返回一组数字
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));
到目前为止一切顺利。现在我想得到奇数。我怎样才能做到这一点?
答案 0 :(得分:5)
x.filter(n => n%2)
只保留奇数。
如果n
为偶数,n%2
将返回0,过滤器将删除该项目。
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;
答案 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
(终点),您可以创建从l
到r
的数组,以+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; });