2016-04-02 41 views
-2

Neredeyse aynı olan birkaç nesne içeren bir dizi var. Bu nesneleri, aralarında aynı olmayan verileri korurken birleştirmek istiyorum. Hemen hemen aynı iki javascript nesnesini Lodash kullanarak nasıl birleştirebilirim?

[ 
    { 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'} 
    ] 
    } 
] 

ben nihai sonucu olmak istiyorum:

İşte benim veri var

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

Herhangi bir yardım mutluluk duyacağız!

+0

[ '_.mergeWith()'] için verilen örneği deneyin (https: // lodash

Yani, bu sadece örnek uğruna ... hem şu dizide üzerinde işe yarayabilir .com/docs # mergeWith). –

+0

Stackoverflow burada bir veri yapıştırıyor ve gerekli bir sonuç vermiyor ve bir çözüm buluyor. Senin için düşünmemize yardım etmek için buradayız. – Aristarhys

+0

"hemen hemen aynı" tanımı nedir? –

cevap

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) 

Bu en zarif çözüm değildir, ancak o işi alır ve öğeleri içinde herhangi iç içe diziler 1 Nesne uzunluğunda bir diziye "a1" nin herhangi bir uzunlukta dizi birleştirmek ve birleştirecek o tekrarlar.

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

Birleştirme, uniq, sendika vb. Ile farklı yollar denedim ve almadım. Bu mükemmel çalıştı. Yardımın için teşekkürler, Aaron. – kfleisch

İlgili konular