Observe la diferencia entre la forma en que se manejan los nombres y los nombres2. ¿Por qué obtengo esta diferencia? ¿Cómo puedo hacer que los nombres se comporten como names2?
Por cierto, tengo el mismo comportamiento en Firefox.
> names [ 'Liam', 'Noah', 'Oliver', 'Elijah', 'William', 'James', 'Benjamin', 'Lucas', 'Olivia', 'Emma', 'Ava', 'Charlotte', 'Sophia', 'Amelia', 'Isabella', 'Mia' ] > names2 [ 'Noah', 'Oliver', 'Sophia', 'Mia' ] > names .map((n)=>n+'\n') .reduce((x,y)=>x+y,'') 'Liam\n' + 'Noah\n' + 'Oliver\n' + 'Elijah\n' + 'William\n' + 'James\n' + 'Benjamin\n' + 'Lucas\n' + 'Olivia\n' + 'Emma\n' + 'Ava\n' + 'Charlotte\n' + 'Sophia\n' + 'Amelia\n' + 'Isabella\n' + 'Mia\n' > names2 .map((n)=>n+'\n') .reduce((x,y)=>x+y,'') 'Noah\nOliver\nSophia\nMia\n' >Este es el tiempo que se muestran las cadenas.
Por ejemplo, intente escribir esto en una consola de nodo:
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"mostrará esta salida:
'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n' + 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'La primera parte de mi pregunta era la parte importante. Ahora creo que la respuesta es que este comportamiento es una optimización en algunos motores de Javascript para proporcionar una evaluación perezosa de reduce para matrices grandes.
La segunda pregunta ahora se puede reformular como "¿cómo forzar que esa evaluación perezosa se ejecute hasta completarse de la forma en que lo hace console.log ?" Una respuesta a eso sería interesante, pero no la necesito ya que soy capaz de escribir mi propia función de reduce .