2017-08-08 13 views
0

返回數組我試圖返回數字的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));

到目前爲止好。現在我想要得到奇數。我怎樣才能做到這一點?

+2

你基本上是問,如何給'i'添加'2' ..? – Teemu

+0

注意奇數可以描述爲'2n + 1',其中'n'是整數的成員 –

+0

「目前爲止這麼好。」 - 當然?嘗試運行你的代碼。 – georg

回答

3

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)

+0

這是非常好的!非常感謝! :-) – Steve

0

首先,讓我奇怪:

i = i+1-i%2; 

然後遍歷每一秒:

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

注意它返回R-1數字,而不是人數達到R-1


Short呃

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

我們需要確保l很奇怪嗎? (爲了確保我很奇怪) – doctorlove

+0

@foctorlove是的舒爾,編輯 –

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

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