2016-04-02 16 views
-2

Ich habe ein Array, das eine Anzahl von Objekten enthält, die fast identisch sind. Ich möchte diese Objekte zu einem zusammenführen, während die Daten zwischen ihnen nicht gleich sind.Wie kann ich zwei fast identische Javascript-Objekte mit Lodash zu einem zusammenführen?

Hier ist meine Daten:

[ 
    { id: 1, 
    title: 'The title', 
    description: 'The description', 
    categories: [ 
     {id: 1, name: 'Cat 1'} 
    ] 
    }, 
    { id: 1, 
    title: 'The title', 
    description: 'The description', 
    categories: [ 
     {id: 2, name: 'Cat 2'} 
    ] 
    } 
] 

ich das Endergebnis sein wollen: würde

[ 
    { id: 1, 
    title: 'The title', 
    description: 'The description', 
    categories: [ 
     {id: 1, name: 'Cat 1'}, 
     {id: 2, name: 'Cat 2'} 
    ] 
    } 
] 

Jede Hilfe dankbar!

+0

das Beispiel Versuchen gegeben für [ '_.mergeWith()'] (https: // lodash .com/docs # mergeWith). –

+0

Stackoverflow ist kein Ort, an dem Sie Daten und erforderliche Ergebnisse einfügen und eine Lösung erhalten. Wir helfen hier, nicht für Sie zu denken. – Aristarhys

+0

Was ist die Definition von "fast identisch"? –

Antwort

0
var a1 = [ 
    { id: 1, 
    title: 'The title', 
    description: 'The description', 
    categories: [ 
     {id: 1, name: 'Cat 1'} 
    ] 
    }, 
    { id: 1, 
    title: 'The title', 
    description: 'The description', 
    categories: [ 
     {id: 2, name: 'Cat 2'} 
    ] 
    } 
]; 
var a2 = []; 

_.forEach(a1, function(item){ 
    if(a2.length === 0){ 
    a2.push(item); 
    }else{ 
    _.forIn(item, function(value, key){ 
     if(!a2[0].hasOwnProperty(key)){ 
     a2[0][key] = value; 
     }else{ 
      if(typeof value === "object" && value.length > 0){ 
      _.forEach(value, function(v){ 
        console.log("Pushing Item into Categories") 
        a2[0][key].push(v); 
      }) 
      } 
     } 
    }) 
    } 

}) 

console.log(a2) 

Dies ist nicht die eleganteste Lösung, bekommt aber den Job zu erledigen, und es wird eine beliebige Länge Array von „a1“ in ein Array mit einer Länge von 1 Objekt, und kombinieren alle verschachtelten Arrays innerhalb der Elemente kombinieren iteriert über.

So könnte es auch auf der folgenden Array arbeitet ... nur aus Gründen des Beispiels:

var a1 = [ 
    { id: 1, 
    title: 'The title', 
    description: 'The description', 
    categories: [ 
     {id: 1, name: 'Cat 1'} 
    ], 
    franks: [ 
     {"blaH":"blah"} 
    ] 
    }, 
    { id: 1, 
    title: 'The title', 
    description: 'The description', 
    categories: [ 
     {id: 2, name: 'Cat 2'} 
    ] , 
    franks: [ 
     {"blaH":"blah1"} 
    ] 
    } , 
    { id: 1, 
    title: 'The title', 
    description: 'The description', 
    categories: [ 
     {id: 2, name: 'Cat 2'} 
    ] , 
    franks: [ 
     {"blaH":"blah2"}, 
     {"blaH":"blah3"} 
    ] 
    } 
]; 
+0

Ich habe verschiedene Wege mit dem mergeWith, uniq, union usw. versucht und es nicht bekommen. Das hat perfekt funktioniert. Danke für deine Hilfe, Aaron. – kfleisch

Verwandte Themen