最初我有这个问题,虽然数据集是正确的,依赖于JavaScript中的排序就数组而言是不正确的,所以我的解决方案是这样的,只要返回的JSONChrome阵列排序不正确VS其他浏览器
var json = { //Returned from a database
data: {
_0: {key1: val1, key2: val2},
_1: {key1: val1, key2: val2},
...etc etc etc
}
};
var new_arr = [];
for(var i = 0; i < Object.keys(json.data).length; i++) {
var obj = json.data["_"+i];
new_arr.push(obj);
}
console.log(new_arr);
在IE8-11,火狐,歌剧(或任何其他浏览器),这表现为你所期望的。按照返回的原始json对象中的键保存顺序。然而,铬,却使这无序地滥用。数组未按预期顺序排列。例如,在至少一个案例中,“_36”出现在console.log
的“_0”之前,则另一个密钥任意乱序。
请记住JSON对象正确返回。这只是重新排序对象的data
元素未被正确推入阵列。我错过了什么?
注1:_0
et al中的键/值配对。没有关系。这不是问题所在。它与我一起运行一个循环,并且数组没有按照正确的顺序。
注2:循环是正确的。它以正确的顺序访问json.data的属性。问题是他们没有以正确的顺序进入数组。
目前没有什么规范,指出键的顺序遍历,所以它不是“不正确”。将来可能会改变。 – TbWill4321
JSON不保证返回对象的顺序,即使您将它们推送到您的数组时也是如此。 http://stackoverflow.com/a/5525820/4515720如果您期待特定的对象排序,则在使用它之前,您必须对阵列进行排序。 –
这里的踢球者是我直接通过循环('_0','_1','_2'等)访问这些属性。 JSON命令有他们无关紧要,这是一个解决方案。当我尝试将其转换为一个对象数组时,它仍然不合适。 有没有可能我误解了以前的评论? – Orpheus