2012-02-05 32 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

謝謝,Uzi!非常感激。很明顯,我應該睡覺了,而不是昨天晚上繼續黑客= P – nickh 2012-02-05 15:54:43

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

試試這個。如果你只想通過一個foreach函數,你爲什麼要做foreach函數?你也應該只通過doc一次到reduce函數。

+0

感謝您的建議,凱爾。問題中的代碼是一個簡化的例子。我的應用程序中的真實代碼將傳遞許多文檔以reduce(),其中一些文檔將在「value」屬性中包含重複值。 – nickh 2012-02-05 15:55:54

相關問題