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?

Original source

Related problems