2012-02-05 5 views
0

次のJavaScriptでは、出力に同じ値のコピーが複数含まれているのはなぜですか?なぜ結果に同じ値の複数のコピーが含まれていますか?

reduce = function(docs) { 
    var values = []; 

    docs.forEach(function(doc) { 
    if (values.indexOf(doc.value) != -1) return; 

    values.push(doc.value.toDateString()); 
    }); 

    return values; 
} 

doc = {value: new Date("2012-01-01T00:00:00Z")} 

reduce([ doc, doc ]) 
// => ["Sat Dec 31 2011", "Sat Dec 31 2011"] 

答えて

3

あなたの鑑定が間違っています。

if (values.indexOf(doc.value.toDateString()) != -1) return;

+0

ありがとう、ウジ!とても有難い。明らかに、私は昨晩ハッキングしたままではなく、寝るべきだった= P – nickh

0
reduce = function(docs) { 
    var values = []; 
    if (values.indexOf(doc.value.toDateString()) != -1) return; 
    values.push(doc.value.toDateString()); 
    return values; 
} 

doc = {value: new Date("2012-01-01T00:00:00Z")} 
reduce(doc) 

//["Sun Jan 01 2012"] 

これを試してみてください。 1つしか通過させたくない場合は、なぜforeach関数を実行していますか?また、還元機能に一度だけdocを渡す必要があります。

+0

提案をいただきありがとうございます。問題のコードは簡単な例です。私のアプリケーションの実際のコードは多くのドキュメントをreduce()に渡しますが、その中には "value"プロパティに重複した値が含まれているものがあります。 – nickh

関連する問題