2017-01-10 16 views
3

Ich versuche, ein Objekt Literal in ein Array von Arrays mithilfe einer Funktion zu konvertieren.Objekt zu Array (ein Array von Arrays)

Mit Hilfe der beiden Beispielobjekte ich habe, ist das Endergebnis, denn ich bin auf der Suche wäre:

[ ["ugh","grr"] , ["foo", "bar"] , ["blah" , 138] ] von obj1

[ "shambala","walawala"] , ["foofighter","Barstool"] , ["blahblah",1382342453] ] von obj2

var obj1 = { 
    ugh: "grr", 
    foo: "Bar", 
    blah: 138 
}; 

var obj2 = { 
    shambala: "walawala", 
    foofighter: "Barstool", 
    blahblah: 1382342453 
}; 

var piece1 = Object.keys(obj1); 

var piece2 = Object.values(obj1); 

var result = [ ]; 

for (var i = 0; i < piece1.length; i++) { 
result.push([piece1[i] , piece2[i]]) 
} 

console.log(result) 

Von dem, was ich oben haben, Ich konnte erreichen:

[ ["ugh","grr"] , ["foo", "bar"] , ["blah" , 138] ] von obj1

Aber ich bin ratlos darüber, wie man die gleiche Ausgabe über eine Funktion erreicht.

Dies scheint wie eine einfache Sache.

Dies ist, was das Beste, was ich tun kann, aber ich bekomme weiter 1 und ich weiß nicht warum. Andere Versuche, die ich gerade mit undefiniert.

+0

[ 'Array # push'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push) gibt den neuen Länge des Arrays, nachdem Sie ein Element dorthin verschoben haben. – 4castle

Antwort

1

Wenn es in Ihrer Umgebung unterstützt wird, könnten Sie Object.entries verwenden:

var obj1 = { 
    ugh: "grr", 
    foo: "Bar", 
    blah: 138 
}; 

var pairs = Object.entries(obj1); 

Alternativ können Sie eine entries Funktion wie folgt schreiben:

function entries(object) { 
    const pairs = []; 
    for(let key in object) { 
    if(object.hasOwnProperty(key)) { 
     pairs.push([key, object[key]]); 
    } 
    } 
    return pairs; 
} 
3

Das Problem mit Ihrem Code ist du bist Verwenden Sie die return früher als benötigt, siehe diesen Arbeitscode:

var obj1 = { 
 
    ugh: "grr", 
 
    foo: "Bar", 
 
    blah: 138 
 
}; 
 

 
var obj2 = { 
 
    shambala: "walawala", 
 
    foofighter: "Barstool", 
 
    blahblah: 1382342453 
 
}; 
 

 
function objToArray(objectLiteral) { 
 
    var piece1 = Object.keys(objectLiteral); 
 
    var piece2 = Object.values(objectLiteral); 
 
    var result = []; 
 
    for (var i = 0; i < piece1.length; i++) { 
 
    result.push([piece1[i], piece2[i]]) 
 
    } 
 
    return result; 
 
} 
 

 
console.log(objToArray(obj1));

+0

Vielen Dank an alle, die etwas kommentiert/gelesen/beigetragen haben. Ich schätze es sehr. –

+0

Tha'er, du hast den Nagel auf den Kopf geschlagen. Es war die fehlplatzierte Rückkehr. –

0

Hier ist, wie ich es umsetzen würde.

function objectToArray(obj) { 
    return Object.keys(obj).map(function(prop) { 
     return [prop, obj[prop]]; 
    }); 
} 

// ES2015 
function objectToArray (obj) { 
    return Object.keys(obj).map(prop => [prop, obj[prop]]); 
} 

View demo

Verwandte Themen