#Gente tengo este codigo

1 messages · Page 1 of 1 (latest)

night canopy
#

el objeto que se envia es el siguiente

#

[ { "question_name": "name 1", "answers": [ { "list_order": "1", "answer_name": "array 1 answer 1", "voteCount": 5 }, { "list_order": "2", "answer_name": "array 1 answer 2", "voteCount": 2 }, { "list_order": "3", "answer_name": "array 1 answer 3 ", "voteCount": 4 }, { "list_order": "4", "answer_name": "array 1 answer 4", "voteCount": 6 } ] }, { "question_name": "name 2", "answers": [ { "list_order": "1", "answer_name": "array 2 answer 1", "voteCount": 1 }, { "list_order": "2", "answer_name": "array 2 answer 2", "voteCount": 0 }, { "list_order": "3", "answer_name": "array 2 answer 3 ", "voteCount": 4 }, { "list_order": "4", "answer_name": "array 2 answer 4", "voteCount": 6 } ] } ]

languid tusk
#

Hola @night canopy puedes usar un objeto que se va creando de acuerdo a la cantidad de pruebas y no necesitas condicionarlo, ya que sumaras no por variable creada (las answerOneCount, answerTwoCount, etc) si no dentro del mismo objeto buscaras la posición y sumaras

night canopy
#

Hola Juan, como estas?

#

Me detallarias un poco mas?

languid tusk
#

Dejame hago un ejemplo y te lo mando

night canopy
#

dale gracias

languid tusk
#

@night canopy las preguntas siempre tendrán la misma cantidad de respuestas?

night canopy
#

No esta hablado, para mi deberian tener las misma cantidad de respuestas igualmente

#

hagamosla con misma cantidad de respuestas

languid tusk
#

@night canopy con este código te funcionaría 😄

const calculateVotes = (polls) => {
  return polls.reduce((acc, poll) => {
    poll.answers.forEach((answer) => {
      const key = `answer_${answer["list_order"]}_count`;
      acc[key] ||= 0;
      acc[key] += answer.voteCount;
    });

    return acc;
  }, {});
};
night canopy
#

lo pruebo y te aviso

#

creo que te amo

#

yo le tuve que agregar el "list_order", se podria hacer sin esa property?

languid tusk
night canopy
#

me podrias explicar la parte del reduce?

#

No soy experto en ese justamente jajaja

languid tusk
#

Claro... el reduce es una función de los arreglo que te permiten modificar lo que esperas devolver, por ejemplo quieres sumar todas las propiedades de un objeto dentro de un arreglo, con reduce puedes hacer que por cada iteración sume el acumulador (la variable acc), entonces en su código, lo que hace reduce es iterar todas las polls, por cada poll lo que hará es iterar las respuestas y por cada pregunta, lo que hará es modificar una propiedad de la variable acumulativa (por eso se crea la variable key, que siempre sera answer_index_count, donde index será el numero de la iteración de cada pregunta), la linea que le sigue (acc[key] ||= 0) es una validación para determinar si existe esa propiedad o debería crear, seria algo como:

if (!acc[key]) {
  acc[key] = 0;
}

Espero me haya dado a entender, sino pregunta!

night canopy
#

AHHH

#

ya capte todo

#

te amo MUCHAS GRACIAS

#

sos un GENIO

#

digamos que reduce es la forma mas facil de hacer esta operacion

#

o se puede hacer de otra forma?

languid tusk
#

Se pueden hacer de muchas formas, a la final es iterar tu información y guardarla en un objeto, puedes usar un for tradicional o un forEach

night canopy
#

acc[key] ||= 0;
acc[key] += answer.voteCount;

#

la parte

#

donde pones "acc[key]" me esta costando interpretarla

#

que seria eso?

languid tusk
#

@night canopy es como poner:

acc.nombre_propiedad += answer.voteCount

// si la propiedad tiene espacios se suele poner:
acc['nombre propiedad espacio'] += answer.voteCount

// pero tambien se puede pasar un string almacenado en variable:
const key = "nombre_propiedad" // o "nombre propiedad espacio"
acc[key] += answer.voteCount // esto a la final deberia ser alguna de las 2 formas anteriores solo que almacenado en variable
night canopy
#

Claro, "acc" es un objeto vacio no?

languid tusk
night canopy
#

excelente

#

ahora si

#

todo claro

#

muchas gracias

#

cualquier cosa te puedo seguir escribiendo?