Insert within array whose parent property value is equal to the property value of the child object

5

I have an object (Questions) and I want another object (Answers) to be added to it according to a common id.

var Perguntas = [
    { idPergunta: 13, textoPergunta: "Qual seu nome" , Respostas : [] },
    { idPergunta: 26, textoPergunta: "Qual sua idade" , Respostas : [] }        
]

var Respostas = [
    { idPergunta: 13, idResposta: 1, textoResposta: "Joao", ordemResposta: 0 },
    { idPergunta: 13, idResposta: 2, textoResposta: "Jose", ordemResposta: 1 } 
    { idPergunta: 26, idResposta: 3, textoResposta: "15", ordemResposta: 0 },
    { idPergunta: 26, idResposta: 4, textoResposta: "30", ordemResposta: 1} 
]

for(var i = 0; i < Respostas.length; i++){
    Pergunta[?].Respostas = Respostas[i];
}
// Quero evoluir esse código pra chegar a resposta.

I broke my mind, but I still can not think of an algorithm to solve this, maybe it's simple and a push will help me.

This code I did head without testing, if you notice some syntax error let me know that I correct. I do not know for example if I can declare Answers: [] inside Questions or if it's just leave blank, null or not put.

    
asked by anonymous 06.11.2014 / 20:13

1 answer

7

You can do this:

Perguntas.forEach(function (pergunta) {
    var id = pergunta.idPergunta;
    pergunta.Respostas = Respostas.filter(function (resposta) {
        return resposta.idPergunta == id; // aqui o filter retira as que derem false
    });
});

Example: link

var Perguntas = [
    { idPergunta: 13, textoPergunta: "Qual seu nome" , Respostas : [] },
    { idPergunta: 26, textoPergunta: "Qual sua idade" , Respostas : [] }        
]

var Respostas = [
    { idPergunta: 13, idResposta: 1, textoResposta: "Joao", ordemResposta: 0 },
    { idPergunta: 13, idResposta: 2, textoResposta: "Jose", ordemResposta: 1 },
    { idPergunta: 26, idResposta: 3, textoResposta: "15", ordemResposta: 0 },
    { idPergunta: 26, idResposta: 4, textoResposta: "30", ordemResposta: 1} 
]

Perguntas.forEach(function (pergunta) {
    var id = pergunta.idPergunta;
    pergunta.Respostas = Respostas.filter(function (resposta) {
        return resposta.idPergunta == id;
    });
});

alert(JSON.stringify(Perguntas[0], null, 2));

The idea is to iterate all the questions and in the pergunta.Respostas property go get the answers. Here the .filter() is very practical because it checks all the answers and leaves an array with only those that have id equal to the question ( resposta.idPergunta == id; ).

    
06.11.2014 / 20:18