2017-11-05 2 views
0

Ich möchte mehrere Arrays zuordnen und ein weiteres Array erstellen, wenn es eine Übereinstimmung gibt. Der Schlüssel könnte in einer beliebigen Anzahl von Arrays oder gar nicht übereinstimmen.Javascript: Passende Objekte in mehreren Arrays von Objekten + Aliasse

[ [{ 'a': 13 }, { 'b': 62 }, { 'c': 93 }, { 'd': 52 }], 
    [{ 's': 15 }, { 'y': 15 }, { 'x': 78 }, { 'd': 84 }], 
    [{ 't': 35 }, { 'd': 33 }, { 'x': 12 }, { 'c': 62 }] ] 

Wunschergebnis:

[ {label: c, arr1: 93, arr2: null, arr3: 63}, 
    {label: d, arr1: 52, arr2: 84, arr3: 33}, 
    {label: x, arr1: null, arr2: 78, arr3: 12} ] 

.

label arr1 arr2 arr3 
============================ 
c  93  null 62 
d  52  84  33 
x  null 78  12 

Eine erweiterte Frage dazu. Ist es möglich, einige Schlüssel zu aliasieren? Z.B. vielleicht ist 'b' auch bekannt als 'y' und 's' als 't'.

+0

Welche Code mit dir angefangen? – Callam

Antwort

1

versuchen, etwas wie folgt aus:

let output = []; 
let aliases = {'b': ['y'], 's': ['t']}; 
let totalArrays = yourArray.length; 

yourArray.forEach((innerArray, i) => 
    innerArray.forEach(obj =>{ 
     for(var key in obj){ 
     let current = output.find(e => e.label == key || (aliases[e.label] || []).indexOf(key) !== -1); 
      if(!current){ 
       current = { label: key }; 
       for(let i = 0; i < totalArrays; i++){ 
        current['arr' + (i + 1)] = null; 
       } 
       output.push(current); 
      } 

      current['arr'+ (i +1)] = obj[key]; 
     } 
})); 
+0

Erstaunlicher Mann. Ich würde buchstäblich Stunden brauchen, um so etwas herauszufinden. Wie kann ich das Objekt entfernen, das keine Übereinstimmungen hat? http://jsbin.com/vudedokaqo/edit?js,output –

+0

Die Ausgabeeinträge werden dynamisch hinzugefügt, wenn das Label zum ersten Mal angezeigt wird, daher sollten keine Objekte ohne Übereinstimmungen vorhanden sein. Ich nehme an, dass Sie in Ihrem Quell-Array keine Objekte wie {'a': undefined} haben werden. – mickl

Verwandte Themen