2017-07-17 3 views
-1

Ich habe zwei Arrays (initialArray und updatedArray) und beide haben 18 Elemente.kombiniert ein kleineres Array (mit Objekt-Elementen mit Schlüssel-Wert-Paaren) in ein größeres Array

Jedes Element im initialArray ist ein Objekt mit 5 Schlüsselwertpaaren.

initialArray:

[0] 
    head: 'hi', 
    a: '', 
    b: '', 
    c: '', 
    d: '' 
[1] 
    head: 'yo', 
    a: '', 
    b: 'old', 
    c: '', 
    d: '' 
. 
. 
. 

updatedArray ist wie initialArray aber: 1) es gewohnt haben alle 5 Schlüsselwerte (nur zwischen 2 und 3 einschließlich Kopf). 2) initialArray hat leere ODER alte Werte, während updatedArray neu ist/bestückt) 3) die Elemente sind in einer anderen Reihenfolge z.B.

updatedArray:

[0] 
    head:'yo', 
    b: 'bb', 
    d: 'dd' 
[1] 
    head:'hi', 
    b: 'bb', 
    a: 'aa' 
. 
. 
. 

Kann jemand etwas beraten in für die Schlüsselwerte von updatedArray Überschreiben initialArray (mit der ‚Kopf‘ Taste, um die Elemente zwischen den Anordnungen entsprechen). Der Kopf Schlüssel wird nie aktualisiert, aber die anderen Schlüsselwerte sind.

Ich würde dies mehrmals ausführen, wenn benötigt, so kann ich nicht davon ausgehen, initialArray wird immer leere Werte haben. Wenn die Leerwerte nicht überschrieben werden, dann sind sie wie in dem unten stehenden Ergebnis erhalten:

combinedArray:

[0] 
    head: 'hi', 
    a: 'aa', 
    b: 'bb', 
    c: '', 
    d: '' 
[1] 
    head: 'yo', 
    a: '', 
    b: 'bb', 
    c: '', 
    d: 'dd' 
. 
. 
. 

jede Beratung? mein aktueller Versuch versucht, etwas mit 3 for-Schleifen zu tun:

for (var k in updatedArray){ 
     for (var kk in initialArray){ 
      if(updatedArray[k].head ==initialArray[kk].head){ 
       for (var kkk in updatedArray[k][kk]){ 
        initialArray[k][kk][kkk] = updatedArray[k][kk][kkk]; 
       } 
      } 

     } 
    } 

in diesem Fall k der Index (0,1) ist, kk ist der Schlüssel (Kopf, a, b, usw.) und kkk ist der Wert des Schlüsselwerts. obwohl dies nicht funktioniert

Antwort

0

Das ist, was Sie brauchen. Die Art, wie Sie versuchen, auf die Eigenschaften in der dritten Schleife zuzugreifen, ist nicht korrekt. Siehe den folgenden Code.

var initarray = [{ 
 
    head: 'hi', 
 
    a: '', 
 
    b: '', 
 
    c: '', 
 
    d: '' 
 
}, { 
 
    head: 'yo', 
 
    a: '', 
 
    b: 'old', 
 
    c: '', 
 
    d: '' 
 
}] 
 

 
var updatedarray = [{ 
 
    head: 'yo', 
 
    b: 'bb', 
 
    d: 'dd' 
 
}, { 
 
    head: 'hi', 
 
    b: 'bb', 
 
    a: 'aa' 
 
}] 
 

 
for (var k in updatedarray) { 
 
    for (var kk in initarray) { 
 
    if (updatedarray[k].head == initarray[kk].head) { 
 
     for (var kkk in updatedarray[k]) { 
 
     initarray[kk][kkk] = updatedarray[k][kkk]; 
 
     } 
 
    } 
 

 
    } 
 
} 
 

 
console.log(JSON.stringify(initarray)); 
 
//console.log(initarray);

this helps :)

0

EDIT: ich eine Verbesserung gegenüber dem vorherigen Code vorgenommen haben. Dies ist die einfachste Lösung, die ich tun konnte (Used Object.assign dafür):

updatedArray.forEach(function(update){ 
    var initial = initialArray.find(x => x.head === update.head); 
    Object.assign(initial, update); 
}); 

Beachten Sie, dass, wenn die updateArray zusätzliche Eigenschaften haben, werden sie auch hinzugefügt werden.

Verwandte Themen