12

Problem is: Chrome automatically sorts properties of object.

If I have an object like:

var obj = {4: "first", 2: "second", 1: "third"};

then when I do next:

for(var i in obj) {
    console.debug(obj[i]);
}

I see next:

third second first

but expect:

first second third

Luc125
  • 5,752
  • 34
  • 35
setty
  • 215
  • 2
  • 14
  • possible duplicate of [Sorting javascript by property value ](http://stackoverflow.com/questions/1069666/sorting-javascript-by-property-value) – viam0Zah Feb 03 '11 at 12:50

2 Answers2

18

Never rely on the order of properties. They are unordered and there is no specification that defines in which order properties should be enumerated.

Chrome orders properties with numeric keys numerically, whereas other browsers enumerate them in insertion order. It is implementation dependent.

Felix Kling
  • 795,719
  • 175
  • 1,089
  • 1,143
  • `there is no specification that defines in which order properties should be enumerated` ..... I have an idea. How about the order WE PUT THEM IN. – Gavin Jun 29 '14 at 22:44
5

You should not expect any particular order for keys in for..in loops. From the MDC docs:

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

If you want ordering using numerical keys, use an array.

lonesomeday
  • 233,373
  • 50
  • 316
  • 318