2017-06-26 1 views
0

Mit lodash kann ich zwei Arrays zusammenführen, indem ich IDs vergleiche, wenn ein Array die ID als String hat und das andere die ID als a hat Nummer?Verschmelzen Sie zwei Arrays, wenn die ID in jedem Array einen anderen Typ hat (String, Zahl)

var a = [{ 
    id: 1, 
    item: 1 
}, { 
    id: 2, 
    item: 2 
}, { 
    id: 3, 
    item: 4 
}]; 

var b = [{ 
    id: "1", 
    profile: 1 
}, { 
    id: "2", 
    profile: 2 
}]; 

Das habe ich ausprobiert. Dies funktioniert einwandfrei, wenn die IDs in beiden Arrays Strings sind oder beide IDs Zahlen sind. Das Hinzufügen von toString() oder parseInt scheint ebenfalls nicht zu funktionieren.

return _.map(a, function(obj) { 
    return _.assign(obj, _.find(b, { 
     id: obj.id 
    })); 
}); 

Antwort

1

Wie wäre es, eine benutzerdefinierte Funktion an die _.find() Methode zu übergeben?

return _.map(a, function(obj) { 
    return _.assign(obj, _.find(b, function(o) { 
     return o.id == obj.id; 
    })); 
}); 
+0

Gibt es eine Möglichkeit alle seine Zahl, die die IDs für die resultierende Anordnung zu machen? Wie du sagst, sind IDs 1 und 2 String und ID 3 ist eine Zahl. – JAck28

+0

@ JAck28 Sicher. Ordnen Sie einfach die Ausgabe von '_.assign()' einer Variablen zu und konvertieren Sie den 'id'-Wert in string oder int, bevor Sie ihn an '_.map()' zurückliefern: https://jsfiddle.net/ugL7z0oy/. –

+0

danke, das funktioniert. – JAck28

0
const merged = _.reduce(a, (acc, obj) => { 
    const match = _.find(b, val => obj.id == val.id); 
    return match ? _.concat(acc, _.assign(obj, match)) : acc; 
}, []); 

Arbeits Geige: https://jsfiddle.net/f6ss8vau/

0

können Sie lodash die Verwendung _.merge(). Es verschmilzt rekursiv Arrays und Objekte und führt lose Gleichheit (==) Eigenschaften fusionieren:

var a = [{"id":1,"item":1},{"id":2,"item":2},{"id":3,"item":4}]; 
 

 
var b = [{"id":"1","profile":1},{"id":"2","profile":2}]; 
 

 
var result = _.merge([], a, b); 
 

 
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

+1

Ah, sieht so aus, als ob ich Dinge übermäßig komplizieren würde. – JAck28

Verwandte Themen