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; }

Verwandte Artikel