There is no guarantee of order in a for... in
loop.
Wait, what?
There is no logic in 'order' of object keys. If you'd like, you can grab them and then use .sort
on them. The language specification tells us this explicitly in the for...in
iteration algorithm:
The mechanics and order of enumerating the properties (step 6.a in the first algorithm, step 7.a in the second) is not specified.
What are your options:
In JavaScript, most of the time ordered lists are represented by arrays. You can us an array if like an ordered list in your case:
var values= ["key1","key2","key3"];
for(var i=0;i<values.length;i++){
values[i];// order is guaranteed here.
}
Since order is guaranteed you can also easily reverse it:
var values= ["key1","key2","key3"].reverse();//reverse is an array method
for(var i=0;i<values.length;i++){
values[i];// order is guaranteed here.
}
If you already have an object you can grab its keys and .sort
them based on some criterion, for example - in a lexicographical order :
var obj = {"key1":"value1","key2":"value2","key3":"value3"};
var keys = Object.keys(obj).sort().reverse(); // see note
for(var i=0;i<keys.length;i++){
console.log(keys[i]);
}
// will output key3, key2, key1
note: you can pass a comparator to .sort
and have it reverse it for you instead of chaining - which is probably better practice. I kept it this way for pedagogical purposes.