Stack Overflow em Português Asked by David Coelho on September 26, 2021
Estou tentando agrupar um array de objetos que vem do banco no seguinte formato:
[
{
'12312312': { 'first_name': 'David', 'id_question': 0, 'acertou': 1 },
'23423423': { 'first_name': 'Luis', 'id_question': 0, 'acertou': 1 },
'45645645': { 'first_name': 'José', 'id_question': 0, 'acertou': 1 }
},
{
'12312312': { 'first_name': 'David', 'id_question': 1, 'acertou': 1 },
'23423423': { 'first_name': 'Luis', 'id_question': 1, 'acertou': 0 },
'45645645': { 'first_name': 'José', 'id_question': 1, 'acertou': 1 }
},
{
'12312312': { 'first_name': 'David', 'id_question': 2, 'acertou': 1 },
'23423423': { 'first_name': 'Luis', 'id_question': 2, 'acertou': 1 },
'45645645': { 'first_name': 'José', 'id_question': 2, 'acertou': 0 }
}
]
Estou precisando transformá-lo para o seguinte formato:
[
{
first_name: "David",
resultados: [
{ "id_question": 0, "acertou": 1 },
{ "id_question": 1, "acertou": 1 },
{ "id_question": 2, "acertou": 1 }
]
},
{
first_name: "Luis",
resultados: [
{ "id_question": 0, "acertou": 1 },
{ "id_question": 1, "acertou": 0 },
{ "id_question": 2, "acertou": 1 }
]
},
{
first_name: "José",
resultados: [
{ "id_question": 0, "acertou": 1 },
{ "id_question": 1, "acertou": 1 },
{ "id_question": 2, "acertou": 0 }
]
}
]
Alguém poderia me ajudar por favor?
Obrigado.
Opa, consegui obter seu resultado esperado utilizando apenas Javascript puro.
Segue código abaixo:
var arrBase = [
{
12312312: { first_name: "David", id_question: 0, acertou: 1 },
23423423: { first_name: "Luis", id_question: 0, acertou: 1 },
45645645: { first_name: "José", id_question: 0, acertou: 1 },
},
{
12312312: { first_name: "David", id_question: 1, acertou: 1 },
23423423: { first_name: "Luis", id_question: 1, acertou: 0 },
45645645: { first_name: "José", id_question: 1, acertou: 1 },
},
{
12312312: { first_name: "David", id_question: 2, acertou: 1 },
23423423: { first_name: "Luis", id_question: 2, acertou: 1 },
45645645: { first_name: "José", id_question: 2, acertou: 0 },
},
];
var arrFinal = [];
// loop através da lista base
for (let idx = 0; idx e.first_name === elementoBase.first_name
);
// primeira situação: se existir o elemento devo acrescentar o resultado
if (elementoEncontrado) {
// encontro o index do elemento para substituí-lo posteriormente
const idxElementoEncontrado = arrFinal.findIndex(
(e2) => e2.first_name === elementoEncontrado.first_name
);
// substituo o elemento acrescentando o resultado
arrFinal[idxElementoEncontrado] = {
first_name: elementoBase.first_name,
resultados: elementoEncontrado.resultados.concat({
id_question: elementoBase.id_question,
acertou: elementoBase.acertou,
}),
};
// segunda situação: se não existir o elemento
// devo criar um array novo com primeiro resultado
} else {
arrFinal.push({
first_name: elementoBase.first_name,
resultados: [
{
id_question: elementoBase.id_question,
acertou: elementoBase.acertou,
},
],
});
}
}
}
console.log(JSON.stringify(arrFinal, null, "t"));
// [
// {
// 'first_name': 'David',
// 'resultados': [
// {
// 'id_question': 0,
// 'acertou': 1
// },
// {
// 'id_question': 1,
// 'acertou': 1
// },
// {
// 'id_question': 2,
// 'acertou': 1
// }
// ]
// },
// {
// 'first_name': 'Luis',
// 'resultados': [
// {
// 'id_question': 0,
// 'acertou': 1
// },
// {
// 'id_question': 1,
// 'acertou': 0
// },
// {
// 'id_question': 2,
// 'acertou': 1
// }
// ]
// },
// {
// 'first_name': 'José',
// 'resultados': [
// {
// 'id_question': 0,
// 'acertou': 1
// },
// {
// 'id_question': 1,
// 'acertou': 1
// },
// {
// 'id_question': 2,
// 'acertou': 0
// }
// ]
// }
// ]
CodePen: https://codepen.io/maicongodinho1/pen/wvdpXpj
Qualquer dúvida só perguntar.
Answered by Maicon Godinho on September 26, 2021
Resolvi da seguinte forma utilizando o groupBy do lodash:
let itt = []; // Recebe os valores do banco de dados
let arr1 = [];
for (let i = 0; i < itt.length; i++) {
arr1.push(Object.values(itt[i]))
}
let arr2 = [];
for (let j = 0; j < arr1.length; j++) {
for (let z = 0; z < Object.values(arr1[j]).length; z++) {
arr2.push(arr1[j][z])
}
}
let arr3 = _.groupBy(arr2, 'first_name')
let arr = []
Object.keys(arr3).map(function (objectKey, index) {
let value = arr3[objectKey];
let val1 = {
first_name: objectKey,
respostas: value
}
arr.push(val1)
});
this.itemsFiltered = arr; // Valores no formato que desejo enviar para o front
Funcionou pra mim.
Answered by David Coelho on September 26, 2021
Cara, acho que nem precisa criar outro array, usa o .forEach ou .indexOf e boa. Por exemplo:
var arrTemp = JSON.parse(resposta_do_banco);
arrTemp.forEach(fillResumeArr);
function fillResumeArr(item, index)
{
//como seus subitens são arrays, verifico se o item é um array, e boa
if(item.isarray()){
//faz o que quiser com o item.
}
}
Answered by Rafael Mori on September 26, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP