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

相关问题