¿Por qué el resultado contiene varias copias del mismo valor?

Con el siguiente JavaScript, ¿por qué la salida contiene varias copias del mismo valor?

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

preguntado el 05 de febrero de 12 a las 03:02

2 Respuestas

Tu verificación es incorrecta.

Debería ser if (values.indexOf(doc.value.toDateString()) != -1) return;

Respondido 05 Feb 12, 07:02

¡Gracias, Uzi! Muy apreciado. Claramente debería haberme ido a la cama en lugar de seguir hackeando anoche = P - Nick

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

Prueba esto. ¿Por qué está haciendo una función foreach si solo quiere que pase una? También deberías estar pasando doc una vez a la función de reducción.

Respondido 05 Feb 12, 07:02

Gracias por la sugerencia, Kyle. El código del problema es un ejemplo simplificado. El código real de mi aplicación pasará muchos documentos para reducir (), algunos de los cuales contendrán valores duplicados en la propiedad "valor". - Nick

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.