2016-03-29 17 views
0

2で割った余りの値が0でない場合、この値は奇数でなければなりません。私は奇妙な値を保持するために私のifステートメントでそのロジックを使用しようとしているものも取り除く。私はこれをどうやってやっているのかよくわからないが、myArrayは奇数だけでなく値も返している。何か案は?剰余演算子で奇数と偶数をソートする

function sumFibs(num) { 
    var myArray = [1,1]; 
    // Create fibonacci sequence 
    // Stop creating fibonacci numbers at num 
    // Push odd numbers to oddNums array 
    for (var i = 0; i < myArray.length; i++) { 

    if (myArray[i+1] + myArray[i] <= num && myArray[i+1] + myArray[i] % 2 !== 0) { 
     myArray.push(myArray[i+1] + myArray[i]); 
    } 
    } // End loop. 

    console.log(myArray); 
    // Summation of oddNums array. 
    return myArray.reduce(function(a,b) { 
    return a + b; 
    }); 
} // End function. 

sumFibs(1000); 
+2

なぜ['filter'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter)を使用しないのですか? – Xufox

+2

'(myArray [i + 1] + myArray [i])%2!== 0'のように、おそらく' myArray [i + 1] + myArray [i] 'の周りにかっこを使うべきでしょう。 – Xufox

+0

オペレータの優先順位に問題があるように見えます。 –

答えて

0

フィブリシーケンスを生成する際に奇数値をフィルタリングしようとしていますが、これはおそらく最良の方法ではありません。モジュロ式をカッコで囲むと、配列の生成に必要な値が配列には含まれません。理想的には完全な嘘シリーズを生成し、フィルタリングする必要があります

var myArray = [1,1]; 
for (var i = 0; i <= num; i++) { 
    myArray.push(myArray[i+1] + myArray[i]); 
} // End loop. 
myArray = myArray.filter(function(a){ return a%2 !== 0 }) 

または彼らは、一連の所望のサブセットを計算するために使用することができるようにしても値がいくつかの参照を保存します。

+0

右のシリーズ全体を生成してフィルタを作成します。このアプローチはうまくいった。投稿していただきありがとうございます。奇数を返すには、{a%2!== 0}を返す必要があることに注意してください。私はあなたの記事にそれを編集しようとします。 –

+0

ニースキャッチ、申し訳ありません、私は校正なしでそれをタイプしました。 – nick

関連する問題