So erstellen Sie ein Array von Objekten aus zwei Arrays von Objekten mit einem gemeinsamen Schlüssel - JavaScript
über uns
Ich muss 2 Arrays von Objekten aus Rest-API-Aufrufen zusammenführen. Sie sind wie: [{date: date, name: name}, ...]
Nennen wir sie A-Array und B-Array.
Wenn in den A-Arrays und B-Arrays das gleiche Datum vorhanden ist, sollte das endgültige Array-s-Objekt so aussehen: [{date: date, nameA: nameA, nameB: nameB}]
Wenn dies nicht der Fall ist, fügen Sie einfach Insert und Objekt wie folgt ein: [{date: dateA, nameA: nameA}]
Beispielsweise:
arrayA = [
{
date: 2017-01-01,
name: 'New Year Eve'}
},
{
date: 2017-02-02,
name: 'feb2'
}
]
arrayB = [
{
date: 2017-01-01,
name: 'New Year Eve'}
},
{
date: 2017-03-03,
name: 'march3'
}
]
Das endgültige Array sollte wie folgt aussehen:
finalArray = [{
date: 2017 - 01 - 01,
nameA: 'New Year Eve',
nameB: 'New Year Eve'
},
{
date: 2017 - 02 - 02,
nameA: 'feb2'
},
{
date: 2017 - 03 - 03,
nameB: 'march3'
}
]
Und die Objekte mit gemeinsamem Datum können sich an unterschiedlichen Positionen im Array befinden, daher kann ich nicht einfach überprüfen, wie
arrayA[0].date === arrayB[0].date
Nina Scholz
Sie könnten eine Hash-Tabelle für die Referenz auf die Objekte mit dem gleichen Datum verwenden.
var arrayA = [{ date: '2017-01-01', name: 'New Year Eve' }, { date: '2017-02-02', name: 'feb2' }],
arrayB = [{ date: '2017-01-01', name: 'New Year Eve' }, { date: '2017-03-03', name: 'march3' }],
merged = function merge(arrays, names) {
var hash = Object.create(null),
result = [];
arrays.forEach(function (a, i) {
a.forEach(function (b) {
if (!hash[b.date]) {
hash[b.date] = { date: b.date };
result.push(hash[b.date]);
}
hash[b.date][names[i]] = b.name;
});
});
return result;
}([arrayA, arrayB], ['nameA', 'nameB']);
console.log(merged);
.as-console-wrapper { max-height: 100% !important; top: 0; }