2016-05-31 13 views
0

Beispiel ein Objektarray durch den Server gesendet wird -Javascript Array Manipulation - komplexe JSON Antwort

var x = [{a:1,b:2,c:3,d:[{f:6,g:7}],e:[{h:8}]}, 
    {a:1,b:2,c:3,d:[{f:6,g:7}],e:[{h:8}]}, 
    {a:1,b:2,c:3,d:[{f:6,g:7}],e:[{h:8}]}]; 

wie kann ich es ändern, so dass es so aussieht -

var y = [{a:1,b:2,c:3,h:8},{f:6,g:7,h:8}, 
    {a:1,b:2,c:3,h:8},{f:6,g:7,h:8}, 
    {a:1,b:2,c:3,h:8},{f:6,g:7,h:8}]; 

ich das versucht habe hässlicher Code gerade jetzt -

function arrange(arr){ 
var temp1 = []; 
var temp2 = []; 
var output = []; 

    for(var i = 0;i < arr.length;i++){ 
    temp1 = arr[i].d; 
    temp2 = arr[i].e; 
    temp1.push(temp2[0].h); 

    output.push(arr[i].a,arr[i].b,arr[i].c,temp2[0].h); 
    output.push(temp1); 

    return output; 
    } 
} 

Die Ausgabe ist falsch und gibt mir nur die Werte, ich brauche das Schlüssel/Wert-Paar.

Ich möchte die richtige Antwort auf die Ansicht senden. Ich arbeite im Moment in einer anderen Art und studiere Programmieren, was ich nebenbei mache. Im Moment stecke ich fest. Bitte vergib den schrecklichen Code :).

+0

Ist die Verschachtelung immer nur 1 Level tief oder kann sie beliebig sein? –

+0

@EvanTrimboli Hallo Evan, für die erste Ansicht, die ich treffen möchte, ist die Nesting nur 1 Level. Für den anderen ist es beliebig, vielleicht 2-3 Stufen. – Airynd

+0

Warum ist h: 8 auch im Originalblock enthalten, ist das beabsichtigt? –

Antwort

1

Javascript stellt explizit für destrukturierte Ausdrücke zur Verfügung: eine sehr prägnante Möglichkeit, die Daten in gewünschte Objekte zu extrahieren.

let result = x.reduce((elts, {a, b, c, d: [{f, g}], e: [{h}]}) => { 
    return elts.concat({a, b, c, h}, {f, g, h}) 
}, []) 

Wenn Sie console.log die Variable result, Sie finden es die gewünschten Werte in y gibt:

[{"a":1,"b":2,"c":3,"h":8},{"f":6,"g":7,"h":8},{"a":1,"b":2,"c":3,"h":8},{"f":6,"g":7,"h":8},{"a":1,"b":2,"c":3,"h":8},{"f":6,"g":7,"h":8}] 
+0

Ich sollte JS Dokumente auf MDN lesen. Danke vielmals! Und ja, ich habe einen Fehler gemacht, dass ich ein Array anstelle eines Objekts erstellt habe :) – Airynd

0

Sie erstellen Arrays. Sie möchten Objekte erstellen.

output = []; 
for(var i = 0;i < arr.length;i++){ 
    var obj = { 
     a: arr[i].a, 
     b: arr[i].b, 
     c: arr[i].c, 
     h: arr[i].e.h 
    } 

    var obj2 = { 
     f: arr[i].d.f, 
     g: arr[i].d.g, 
     h: arr[i].e.h 
    } 


    output.push(obj); 
    output.push(obj2); 
} 
return output; 
0

bereits. Änderungen an Ihrem Versuch werden kommentiert:

var x = [{a:1,b:2,c:3,d:[{f:6,g:7}],e:[{h:8}]}, 
    {a:1,b:2,c:3,d:[{f:6,g:7}],e:[{h:8}]}, 
    {a:1,b:2,c:3,d:[{f:6,g:7}],e:[{h:8}]}]; 

function arrange(arr){ 
    var temp1, temp2, output = []; 

    for(var i = 0;i < arr.length;i++){ 
    temp1 = arr[i].d[0]; // grab first array element 
    delete arr[i].d;  // delete d from object 
    temp2 = arr[i].e[0]; // grab first array element 
    delete arr[i].e;  // delete e from object 

    output.push($.extend(arr[i], temp2)); // merge object and e, push 
    output.push($.extend(temp1, temp2)); // merge d and e, push 
    } 
    return output; // move from in for loop to here 
} 

Ausgänge:

[ 
    {a:1,b:2,c:3,h:8}, {f:6,g:7,h:8}, 
    {a:1,b:2,c:3,h:8}, {f:6,g:7,h:8}, 
    {a:1,b:2,c:3,h:8}, {f:6,g:7,h:8} 
] 

JSBin example.

Sie getaggt jQuery, so war es für die extend Funktion verwendet. Plain JS oder kleinere Bibliotheken sind für alle verfügbar, die jQuery nicht verwenden.