可以强制chrome按照它们存储的顺序迭代"字符串数字"键

Wil*_*ill 3 javascript google-chrome

我似乎只在chrome(而不是IE,FF)中遇到了一个有趣的问题.给出以下对象:

var myObj = {
  "59" : "Hello",
  "52" : "and",
  "50" : "how",
  "31" : "are",
  "65" : "you"
};
Run Code Online (Sandbox Code Playgroud)

通过for循环遍历此对象按以下顺序吐出内容:

for(var j in myObj) {  document.write(myObj[j] +', '); }

are, how, and, hello, you
Run Code Online (Sandbox Code Playgroud)

所有其他主要浏览器都以"正确"的顺序给出它.Chrome将键视为整数而不是字符串.问题是我有一个json数据源我无法更改,我需要按照它们在对象中的顺序访问这些项目.

任何人都可以建议在Google Chrome中执行此操作吗?

Fel*_*ing 5

在通过对象迭代时for...in,不保证属性的顺序.你无能为力:

for...in某对象的以任意的顺序的属性循环迭代(见删除操作符以获得更多关于为什么可以不依赖于迭代的似乎有序,至少在一个跨浏览器设置).

并从delete页面:

虽然ECMAScript使对象的迭代顺序依赖于实现,但似乎所有主流浏览器都支持基于最先添加的属性的迭代顺序(至少对于不在原型上的属性).但是,对于Internet Explorer,当在属性上使用delete时,会产生一些令人困惑的行为,从而阻止其他浏览器将对象文字等简单对象用作有序关联数组.在资源管理器中,虽然属性值确实设置为未定义,但如果后来添加了一个具有相同名称的属性,则该属性将在其旧位置迭代 - 而不是在迭代序列的末尾,正如人们可能期望的那样删除了该属性,然后将其添加回来.

因此,如果要在跨浏览器环境中模拟有序关联数组,则必须使用两个单独的数组(一个用于键,另一个用于值),或者构建一个单属性对象数组等. .