2017-01-05 16 views
0

Ich versuche, dieses mehrdimensionale Array in Objekt zu konvertieren, aber wenn ich es ausführen, bekomme ich den zweiten Teil des Arrays in das Objekt gespeichert und der erste Teil fehlt.Multidimensionales Array zu Objekt

Wie bekomme ich das gesamte Array im Objekt gespeichert?

var array = [ 
 
    [ 
 
    ['name', 'John Smith'], 
 
    ['age', 34], 
 
    ['occupation', 'nurse'] 
 
    ], 
 
    [ 
 
    ['name', 'Nico Klein'], 
 
    ['age', 24], 
 
    ['occupation', 'engineer'] 
 
    ] 
 
]; 
 

 
function toObject(arr) { 
 
    var obj = {}; 
 
    for (var j = 0; j < arr.length; j++) { 
 
    for (var i = 0; i < arr[j].length; i++) { 
 
     obj[arr[j][i][0]] = arr[j][i][1]; 
 
    } 
 
    } 
 
    return obj; 
 
} 
 

 
var result = toObject(array); 
 

 
console.log(result);

Und gibt es eine bessere Methode, dies zu schreiben?

+3

Es ist nicht sinnvoll erscheint ein einzelnes Objekt zu erstellen aus diesen Daten. Ein Array von Objekten wäre sinnvoller. –

+2

naja ... jedes 3rd level Paar hat Name, Alter, Beruf ... also bekommst du natürlich nur das letzte ... du brauchst ein Array von Objekten als deine endgültige Ausgabe, kein Objekt ... oder Verwenden Sie einen anderen "Schlüssel" für jede "Person", dann innerhalb dieses "Schlüssels" haben Sie ein Objekt –

+1

Das liegt daran, dass 'arr [j] [i] [0]' ist der gleiche Wert für jede Iteration, so überschreibt es nur den vorhandenen Wert . Zum Beispiel für 'name' macht es:' obj.name = 'John Smith'' dann 'obj.name =' Nico Klein''. –

Antwort

2

Sie haben fast gut gemacht, aber die Eltern sollten Array von Objekten sein, was Sinn macht.

[ 
    { 
    "name": "John Smith", 
    "age": 34, 
    "occupation": "nurse" 
    }, 
    { 
    "name": "Nico Klein", 
    "age": 24, 
    "occupation": "engineer" 
    } 
] 

Und es hat alle Datensätze aus dem ursprünglichen Array:

var array = [ 
 
    [ 
 
    ['name', 'John Smith'], 
 
    ['age', 34], 
 
    ['occupation', 'nurse'] 
 
    ], 
 
    [ 
 
    ['name', 'Nico Klein'], 
 
    ['age', 24], 
 
    ['occupation', 'engineer'] 
 
    ] 
 
]; 
 

 
function toObject(arr) { 
 
    var obj = []; 
 
    for (var j = 0; j < arr.length; j++) { 
 
    var cur = {}; 
 
    for (var i = 0; i < arr[j].length; i++) { 
 
     cur[arr[j][i][0]] = arr[j][i][1]; 
 
    } 
 
    obj.push(cur); 
 
    } 
 
    return obj; 
 
} 
 

 
var result = toObject(array); 
 
console.log(result);

Die Ausgabe in der Reihenfolge sein wird. Wenn Sie das resultierende Array dennoch in ein Objekt konvertieren möchten, sehen Sie sich Convert Array to Object an.

var array = [ 
 
    [ 
 
    ['name', 'John Smith'], 
 
    ['age', 34], 
 
    ['occupation', 'nurse'] 
 
    ], 
 
    [ 
 
    ['name', 'Nico Klein'], 
 
    ['age', 24], 
 
    ['occupation', 'engineer'] 
 
    ] 
 
]; 
 

 
function toObject(arr) { 
 
    var obj = []; 
 
    for (var j = 0; j < arr.length; j++) { 
 
    var cur = {}; 
 
    for (var i = 0; i < arr[j].length; i++) { 
 
     cur[arr[j][i][0]] = arr[j][i][1]; 
 
    } 
 
    obj.push(cur); 
 
    } 
 
    return obj; 
 
} 
 

 
var result = toObject(array); 
 
var resObj = result.reduce(function(acc, cur, i) { 
 
    acc[i] = cur; 
 
    return acc; 
 
}, {}); 
 
console.log(resObj);

Der letzte Objekt Ausgang gibt Ihnen:

{ 
    "0": { 
    "name": "John Smith", 
    "age": 34, 
    "occupation": "nurse" 
    }, 
    "1": { 
    "name": "Nico Klein", 
    "age": 24, 
    "occupation": "engineer" 
    } 
} 
0

Zunächst einmal sollten Sie versuchen, das Array zu konvertieren „Array von Objekten“, das macht Sinn, weil Sie habe zwei Elemente im Array. Sie sollten also versuchen, ein Array von Objekten zu erhalten.

Zweitens ist dieses Programm korrekt, aber es ist ein Fehler. Schauen Sie sich Ihren Code Sie eine var obj = {}; erstellt haben, die ein Objekt ist und Sie das Array zuweisen Werte sollte es Array von Objekt sein, um die Funktion wie folgt ändern

function toObject(arr) { 
    var arrOfObj = []; 
    for (var j = 0; j < arr.length; j++) { 
    var curObj = {}; 
    for (var i = 0; i < arr[j].length; i++) { 
     curObj[arr[j][i][0]] = arr[j][i][1]; 
    } 
    arrOfObj.push(cur); 
    } 
    return arrOfObj; 
} 
Verwandte Themen