为什么结果包含相同值的多个副本?

时间:2012-02-05 07:34:57

标签: javascript arrays date

使用以下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"]

2 个答案:

答案 0 :(得分:3)

您的验证错误。

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

答案 1 :(得分: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函数。