2016-04-07 8 views
0

ich einen Dienst haben, die JSON nach der RückkehrFiltering Kind Sammlungen mit lodash javascript

'data':  [{ 
    'category': { 

     'Questions': [{ 
      aswers: [{ 
       Text: 'Text1' 
      }], 
      Data: 'TT' 
     }], 
     name: 'name1' 
    } 

}, { 
    'category': { 

     'Questions': [{ 
      aswers: [{ 
       Text: 'Text1' 
      }], 
      Data: 'TT' 
     }], 
     name: 'name1' 
    } 

}, { 
    'category': { 

     'Questions': [{ 
      aswers: [{ 
       Text: 'Text1' 
      }], 
      Data: 'TT' 
     }], 
     name: 'name1' 
    } 

}] 

Ich möchte eine Filterabfrage schreiben lodash auf Basis von Mutter Sammlung und Kinderkollektionen.

wo category.Questions.data == 'xxx' und 'ddd' category.Questions.aswers.Text =

ich versuchte unter Abfrage

var x= _.filter(data.category, {Questions: [{Data: 'xxx', 'Questions.aswers.Text':'ddd'}] }); 

danach will ich um den Wert der Antwort zu aktualisieren. Text ausgewählte Objekte.

Beziehungen Schiff ist Datensammlungen der Kategorie hat Objekte Kategorie Objekt Sammlung von Antworten haben Objekte Antworten Sammlung von Textobjekten

haben Objekt Wie kann ich das erreichen?

+0

Sie geschrieben ungültig json – shas

+0

sorry. Die Datenstruktur ist, Daten haben Sammlungen von Kategorien, Kategorie hat Sammlung von Antworten, Antwortobjekt haben Sammlung von Textobjekten, was ich erreichen möchte, ist wo Kategorie.Questions.data == 'xxx' und category.Questions.aswers.Text = 'ddd' – ishan

+0

Kopie seiner gültigen JSON hier: http://paste.ubuntu.com/15670261/ –

Antwort

1

Dies ist ein bisschen schwierig, aber hier ist, wie Sie es tun können.

let matchingQuestions = _.chain(jsonData.data) 
    .map(d => d.category.Questions) //So we have array of Questions arrays 
    .flatten() //Now we have a single array with all Questions 
    .filter({Data: 'xxx'}) //Filtering by Data 
    .map('aswers') //After this we will have an array of answers arrays 
        //(only answers with matching Data definitely) 
    .flatten() //A single array with all answers 
    .filter({Text: 'ddd'}) //Now filtering by Text 
    .value(); //Unwrapping lodash chain to get the result 

    //Now you can update them however you want 
    _.each(matchingQuestions, q => q.Text = 'Updated Text'); 

Hier ist ein jsbin mit Arbeitsbeispiel. Ich benutzte lodash v4.