How could I iterate on object's attributes backwards in javascript?
javascript
Solution
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.
Problem
For example I already have an object filled with ordered key-values, I can iterate its keys forwards with for in statement: ``` var keyvalues = {"key1":"value1","key2":"value2","key3":"value3"}; for(var key in keyvalues) { var value = keyvalues[key]; ............. } ``` Now I want to iterate the keys backwards like 'key3', 'key2', 'key1', is there a magic way to do this?