2017-05-11 3 views
1

Ich habe ein Array wie folgt aus:Objekt von Array mit strengen Ordnung wie innerhalb Array

var startArray = [ 
{value: 2, label: 'label 2'}, 
{value: 1, label: 'label 1'}, 
{value: 17, label: 'label 17'}, 
{value: 15, label: 'label 15'} 
]; 

und ich möchte Erstellen Sie das Objekt wie folgt aus:

var middleObject = { 
2: 'label 2', 
1: 'label 1', 
17: 'label 17', 
15: 'label 15' 
}; 

und ich den Code:

startArray.forEach(function(oneOption) { 
    middleObject[oneOption.value] = oneOption.label; 
}); 
enter code here 

ich wurde auch versucht, diesen Code zu verwenden (mit dem gleichen Ergebnis):

for (var oneOption in startArray) { 
    middleObject[oneOption.value] = oneOption.label; 
} 

Aber Problem ist, wenn ich diesen Code verwende ich so das Objekt nehmen:

var middleWrongObject = { 
1: 'label 1', 
2: 'label 2', 
15: 'label 15', 
17: 'label 17' 
}; 

aber einige später soll ich middleObject in der Schleife mit der gleichen Reihenfolge wie bei den firstArray verwendet. Und Eigentum innerhalb middleObject jedes Mal sollte der Zahlentyp sein. Haben wir eine Methode, um die Reihenfolge für die Eigenschaft innerhalb der middleObject zu setzen (ohne Set-Eigenschaft "bestellen" und sortieren nach diesem Feld später) Danke für die Hilfe.

+2

warum ein Array nicht anstelle eines Objekts benutzen, die eigentlich keine Ordnung hat? –

+1

Objekteigenschaften haben keine Reihenfolge – hindmost

+1

Weiter zum obigen Kommentar - siehe vorherige Frage http://stackoverflow.com/questions/5525795/does-javascript-guarantee-object-property-order –

Antwort

1

Sie könnten das angegebene Array in einen Teil für sortierte Schlüssel aufteilen und ein Objekt als Referenz zu den Daten verwenden.

var startArray = [{ value: 2, label: 'label 2' }, { value: 1, label: 'label 1' }, { value: 17, label: 'label 17' }, { value: 15, label: 'label 15' }], 
 
    keys = startArray.map(a => a.value), 
 
    object = Object.assign(...startArray.map(a => ({ [a.value]: a.label }))); 
 
    
 
keys.sort((a, b) => a - b);    // keys in asc order 
 

 
console.log(keys.map(k => object[k])); // access via keys 
 
console.log(object);

+0

Ja war es hilfreich, aber ohne einen Schlüssel zu sortieren, weil die Sortierung meine Vorstellung bricht, reproduzieren die Reihenfolge von startArray –

Verwandte Themen