1

i need to get real order of simple javascript abject, but i get incorrect answer from this code:

var Obj={"x":"z", "2":"a", "1":"b"};
for(i in Obj)
    document.write(Obj[i]+"<br>");

I expect to see z, a, b as answer, but i get b, a, z
See the code in action: http://jsfiddle.net/gpP7m/

ali
  • 345
  • 1
  • 2
  • 9

2 Answers2

6

There's no guaranteed order in object keys iteration.

A for...in loop iterates over the properties of an object in an arbitrary order

If you need one, use an array of key/value elements :

var obj=[
   {key:"x", value:"z"},
   {key:"2", value:"a"}
];

for (var i=0; i<obj.length; i++) document.write(obj[i].value+'<br>');

On a modern browser (not IE8), you can do :

document.write(obj.map(function(kv){ return kv.value }).join('<br>'));

(which doesn't do exactly the same but probably does what you want)

Denys Séguret
  • 372,613
  • 87
  • 782
  • 758
0

Check for below sample too

var data1 = {"x":"z", "2":"a", "1":"b"};
var arr = [];
var i=0;
$.each(data1,function(index,value) {
   arr[i++] = value;
});
var len = arr.length-1;

while( len>=0 ) {
   if( arr[len] !== undefined ) {
      alert(arr[len]);
   }
   len--; 
}

and referece link is Reverse object in jQuery.each

And fiddle update http://jsfiddle.net/gpP7m/3/

Community
  • 1
  • 1
Bhavesh Parekh
  • 212
  • 2
  • 11