Tak, jest. Nie w standardzie ECMAScript, ale obsługiwany przez przeglądarki i Node.js i wygląda na stabilny. Zobacz https://stackoverflow.com/a/23202095/645715.
EDIT: Zwraca obiekt, w którym są uporządkowane klucze. Możesz użyć Object.keys(...)
, aby uzyskać uporządkowane klucze z obiektu.
Po co martwić się o kolejność kluczy obiektu? Różnica może mieć znaczenie w niektórych aplikacjach, takich jak przetwarzanie XML z xml2js, które reprezentuje XML jako obiekty zagnieżdżone i używa znaczników XML jako kluczy mieszających.
Istnieje kilka uwag:
- klucze, które wyglądają jak liczb pojawiają się pierwsze w kolejności numerycznej.
- Klucze, które wyglądają jak ciągi, pojawiają się w kolejnej kolejności w kolejności reklamowej.
- tym celu zgłasza
Object.keys(obj)
- celu, jak donosi
for (var key in obj) {...}
mogą różnić się w Safari Firefox
Funkcja zwraca się obiekt z kluczy sortowanych wstawiony w porządku alfabetycznym:
function orderKeys(obj, expected) {
var keys = Object.keys(obj).sort(function keyOrder(k1, k2) {
if (k1 < k2) return -1;
else if (k1 > k2) return +1;
else return 0;
});
var i, after = {};
for (i = 0; i < keys.length; i++) {
after[keys[i]] = obj[keys[i]];
delete obj[keys[i]];
}
for (i = 0; i < keys.length; i++) {
obj[keys[i]] = after[keys[i]];
}
return obj;
}
Oto szybki test:
var example = {
"3": "charlie",
"p:style": "c",
"berries": "e",
"p:nvSpPr": "a",
"p:txBody": "d",
"apples": "e",
"5": "eagle",
"p:spPr": "b"
}
var obj = orderKeys(example);
ten zwraca
{ '3': 'charlie',
'5': 'eagle',
apples: 'e',
berries: 'e',
'p:nvSpPr': 'a',
'p:spPr': 'b',
'p:style': 'c',
'p:txBody': 'd' }
Następnie można dostać zamówione klucze jak:
Object.keys(obj)
Które zwraca
["3", "5", "apples", "berries", "p:nvSpPr", "p:spPr", "p:style", "p:txBody"]
Warto zobaczyć: https://stackoverflow.com/questions/5525795/does-javascript-guarantee-object-property-order – aymericbeaumet
Możliwy duplikat [Sort JavaScript Object przez key] (http: // stackoverflow .com/questions/5467129/sort-javascript-object-by-key) – ShadowRanger