2017-09-20 13 views
1
var numbers = [5, 3, 8, 6, 9, 1, 0, 2, 2]; 
var oddEvenCounts = numbers.reduce(function(counts, number) { 
    if (isOdd(number)) { 
    counts[odd]++; 
    } else { 
    counts[even]++; 
    } 
}, {}); 

私はこのコードのバグを探しています(まだreduceメソッドを学習しています)) - どこが間違っていますか?JavaScriptを減らす方法Accumulatorオブジェクトを作成する

+0

変数に格納されているどのような値 'even'と' odd'? – Thomas

答えて

5

コメントと作業コード:

var numbers = [5, 3, 8, 6, 9, 1, 0, 2, 2]; 
 

 
function isOdd(n) { 
 
    return !!(n % 2); 
 
} 
 

 
var oddEvenCounts = numbers.reduce(function(counts, number) { 
 
    if (isOdd(number)) { 
 
    counts.odd++; // use dot notation or ['odd'] 
 
    } else { 
 
    counts.even++; // use dot notation or ['even'] 
 
    } 
 
    
 
    return counts; // return the accumulator 
 
}, { odd: 0, even: 0 }); // set the initial values of odd and even 
 

 
console.log(oddEvenCounts);

あなたは括弧表記と三項演算子を使って、コードを少し短くすることができます:

var numbers = [5, 3, 8, 6, 9, 1, 0, 2, 2]; 
 

 
function isOdd(n) { 
 
    return !!(n % 2); 
 
} 
 

 
var oddEvenCounts = numbers.reduce(function(counts, number) { 
 
    counts[isOdd(number) ? 'odd' : 'even']++; 
 
    
 
    return counts; 
 
}, { odd: 0, even: 0 }); 
 

 
console.log(oddEvenCounts);

+0

ありがとう、超助けてくれてありがとう:私は何をしたのかわかりません - 返信文はなく、カウントオブジェクトを最初に設定しておらず、正しくコールしていませんでした –

+0

@marie_antoinette - welcome :) –

0
はあなたのアキュムレータを返し

var numbers = [5, 3, 8, 6, 9, 1, 0, 2, 2]; 
var oddEvenCounts = numbers.reduce(function(counts, number) { 
    if (isOdd(number)) { 
    counts[odd]++; 
    } else { 
    counts[even]++; 
    } 
    return counts; 
}, {}); 
関連する問題