2016-03-30 3 views
0

Ich habe eine Datenstruktur als solche an der Unterseite .. und ich muss aus dem Array die totype.id === 'REG' und auch alle Instanzen der Objekteigenschaft budgt entfernen.In lodash wie kann ich tief entfernen?

Ich habe einen Teil davon mit dem folgenden Code ausgeführt, und würde eine weitere Iteration durchführen, um die budgt von allen verbleibenden totype s zu entfernen, aber das schien nicht der beste Weg, es zu tun.

_.each(data, function (d, i) { // iterate over each "org" 
    _.each(d.occs, function (occ) { // iterate over each "occ" in current "org" 
    return _.remove(occ.totypes, function (totype) { // remove the totype REG from "totypes" 
     return totype.id === 'REG' 
    }) 

    // how do i remove the "budgt" from each remaining totype 
    }) 
}) 

Beispieldaten

var data = [ 
    { 
    org: "org1", 
    occs: [ 
     { 
     name: "occ1", 
     totypes: [ 
      { 
      id: "REG", 
      act: 1, 
      auth: 2, 
      budgt: 3 
      }, 
      { 
      id: "PRV", 
      act: 1, 
      auth: 2, 
      budgt: 3 
      } 
     ] 
     }, 
     { 
     name: "occ2", 
     totypes: [ 
      { 
      id: "REG", 
      act: 1, 
      auth: 2, 
      budgt: 3 
      }, 
      { 
      id: "PRV", 
      act: 1, 
      auth: 2, 
      budgt: 3 
      } 
     ] 
     }, 
    }, 
    { 
    org: "org2", 
    occs: [ 
     { 
     name: "occ1", 
     totypes: [ 
      { 
      id: "REG", 
      act: 1, 
      auth: 2, 
      budgt: 3 
      }, 
      { 
      id: "PRV", 
      act: 1, 
      auth: 2, 
      budgt: 3 
      } 
     ] 
     }, 
     { 
     name: "occ2", 
     totypes: [ 
      { 
      id: "REG", 
      act: 1, 
      auth: 2, 
      budgt: 3 
      }, 
      { 
      id: "PRV", 
      act: 1, 
      auth: 2, 
      budgt: 3 
      } 
     ] 
     } 
    ] 
    } 
] 
+0

Verwenden Sie einfach Javascipt löschen Funktion. Verwenden Sie nicht Lodash für alles – thangngoc89

+0

okay, sicher, aber ich weiß nicht über die Iteration scheint nicht effizient gibt es eine Möglichkeit mit löschen, um eine Tiefenlöschung zu tun? – gorelative

Antwort

1

Es gibt keine Möglichkeit, "tief entfernen" so, wie Sie mit Lodash beschreiben sind. Es enthält kein Abfragekonstrukt wie MongoDB.

+0

wären Sie in der Lage, einen besseren Ansatz zu bieten? – gorelative

+1

Wenn dies Daten vom Back-End sind, würde ich versuchen, dieses Feld überhaupt nicht zurückzugeben. Wenn Sie diese Daten nicht kontrollieren können, müssen Sie jedes Objekt durchlaufen und löschen. Ich glaube nicht, dass es einen Weg gibt. –

+0

Ja, es ist eine Nutzlast von 20k Datensätze auf der obersten Ebene und clientseitige Filterung, um diese Felder dynamisch zu verbergen. wir wollen nicht wirklich jedesmal Daten holen:/und wir können keine Paginierung durchführen, weil ich alle Daten auf einmal anzeigen muss:/ – gorelative