2016-08-09 11 views

Antwort

2

Verwenden Array#map über Object.keys

Object.keys() Die Methode gibt ein Array einer eigenen enumerable Eigenschaften des gegebenen Objekts.


Die map() Methode erzeugt ein neues Array mit den Ergebnissen der in dieser Anordnung mit einer vorgesehenen Funktion auf jedem Element aufrufen.


var input = { 
 
    a: 2, 
 
    b: 3, 
 
    c: 2, 
 
    d: 1 
 
}; 
 

 
var mapped = Object.keys(input).map(function(key) { 
 
    return { 
 
    name: key, 
 
    id: input[key] 
 
    }; 
 
}); 
 
console.log(mapped);

0

verwenden können Array#forEach über Object.keys

var input = {a:2,b:3,c:2,d:1}; 
 
var output = []; 
 
Object.keys(input).forEach(function(key){ 
 
    output.push({name:key,id:input[key]}); 
 
    }) 
 
console.log(output);

0

JavaScript-Objekteigenschaften sind ungeordnet. Aus diesem Grund ist die Reihenfolge der Schlüssel, die von Object.keys zurückgegeben werden, unbestimmt. Um die alphabetische Reihenfolge wie in Ihrem Beispiel beizubehalten, müssen Sie zuvor die Schlüssel sort eingeben und dann map verwenden, um ein neues Array mit dem erwarteten Wert zu erstellen.

Ich mag ES5 nicht. Also hier ist meine ES6 Antwort.

Object.keys(input).sort((a, b) => a.localeCompare(b)).map(name => ({name, id: input[name]})); 
0

Nur für ein bisschen Spaß und für Trainingszwecke können wir uns das einfallen lassen. Denken Sie daran, dass Sie, obwohl Sie später hinzufügen können, immer eine Symbol.iterator-Methode von der Konstruktorfunktion zum Zeitpunkt der Instanziierung einbetten können, und Ihre Objekte werden standardmäßig iterierbar.

var input = {a:2,b:3,c:2,d:1}, 
 
    output = []; 
 
input[Symbol.iterator] = function*(){ 
 
          var ok = Object.keys(this), 
 
           i = 0; 
 
          while (i < ok.length) yield {[ok[i]]: this[ok[i++]]}; 
 
         }; 
 
for (var keyValuePair of input) output.push(keyValuePair); 
 
console.log(output); 
 

 
// or you can even do like 
 
output.length = 0; 
 
output = [...input]; // cool 
 
console.log(output);

0

Sie können auch unten Ansatz versuchen:

var input = {a:2,b:3,c:2,d:1}; 

var output = Object.keys(input).reduce(function(p, c){ 
    return p.concat({name:c, id:input[c]}); 
}, []);