#Gente tengo este codigo
1 messages · Page 1 of 1 (latest)
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 } ] } ]
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
Dejame hago un ejemplo y te lo mando
dale gracias
@night canopy las preguntas siempre tendrán la misma cantidad de respuestas?
No esta hablado, para mi deberian tener las misma cantidad de respuestas igualmente
hagamosla con misma cantidad de respuestas
@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;
}, {});
};
lo pruebo y te aviso
creo que te amo
yo le tuve que agregar el "list_order", se podria hacer sin esa property?
Puedes usar index del forEach:
const calculateVotes = (polls) => {
return polls.reduce((acc, poll) => {
poll.answers.forEach((answer, index) => {
const key = `answer_${index + 1}_count`;
acc[key] ||= 0;
acc[key] += answer.voteCount;
});
return acc;
}, {});
};
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!
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?
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
acc[key] ||= 0;
acc[key] += answer.voteCount;
la parte
donde pones "acc[key]" me esta costando interpretarla
que seria eso?
@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
Claro, "acc" es un objeto vacio no?
Si, al poner {} en el segundo parámetro del reduce, lo toma como valor inicial, un objeto vacio