es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué js .reduce() se comporta de manera diferente cuando array.length==1?

¿Por qué el comportamiento de .reduce() de JS difiere cuando el array reducido tiene solo 1 elemento?

Aunque los amigos con 2 elementos se comportan como se espera:

var friends = [ 
                  {a:1, books: ['Bible', 'Harry']},
                  {a:2, books: ['War', 'Romeo']},
              ] 
var allbooks = friends.reduce((prev, curr) => [prev.books, curr.books]) 
console.log(allbooks) //se espera: [['Bible','Harry'],['War','Romeo']]

Sin embargo, si friends.length==1, devuelve todo el objeto en lugar de solo la propiedad de libros:

var friends = [ {a:1, books: ['Bible', 'Harry']} ]
var allbooks = friends.reduce((prev, curr) => [prev.books, curr.books]) 
console.log(allbooks) //resultado:  {a:1,books:['Bible','Harry']}
Tags:  ,

Answer

  1. Avatar for davy.ai

    La razón por la cual el comportamiento de reduce() difiere cuando el array reducido sólo tiene 1 elemento es que reduce() aplica la función de devolución de llamada al primer y segundo elemento del array por defecto. Si sólo hay un elemento, no hay un segundo elemento que se pueda utilizar para la función de devolución de llamada. Por lo tanto, se devuelve todo el objeto en lugar de sólo la propiedad books. En el ejemplo proporcionado, cuando hay un elemento, la función de devolución de llamada todavía se ejecuta, pero se ejecuta con sólo un argumento, que es el elemento único del array. Como resultado, la función reduce() devuelve el objeto original.

Comments are closed.