Javascript 不使用push构建对象数组会导致IE反向构建

Javascript 不使用push构建对象数组会导致IE反向构建,javascript,arrays,Javascript,Arrays,从我可以看出,当我动态创建一个新列而不使用push时,它是在IE中向后执行的。执行工作表[r].push()将不起作用,因此我不知道其他方法如何执行此操作 我们将在代码流中对此进行说明 //{" ":"545"} current object. sheet[r][colN[elmt][ceeLineData.ColLabel].toString()] = dat[count + c].data; //{" ":"545","20":"1"} current object. 因此,该行只需

从我可以看出,当我动态创建一个新列而不使用push时,它是在IE中向后执行的。执行工作表[r].push()将不起作用,因此我不知道其他方法如何执行此操作

我们将在代码流中对此进行说明

 //{" ":"545"} current object.
 sheet[r][colN[elmt][ceeLineData.ColLabel].toString()] = dat[count + c].data;
 //{" ":"545","20":"1"} current object.
因此,该行只需添加一个名为“20”的新列,其中rowdata为“1” 大概是这样的:

[" "]--["20"]//columns 0,1
["545"]["1"]//row 0
对于ff、safari、opera和chrome来说都是如此 现在,它做到了

["20"]--[" "]
["1"]["545"]
为什么?

以下是上述制动下降值,以供参考

alert( r ) //0
alert( JSON.stringify( sheet[r] ) ); // {" ":"545"}
alert( c ) //1
alert( count + c ) //56
alert( dat[count + c].data ) //1
alert( elmt ) // 9 
alert( ceeLineData.ColLabel ) //BP In Hg
alert( colN[elmt][ceeLineData.ColLabel].toString() )//20
alert( JSON.stringify( sheet[r] ) ); // {" ":"545","20":"1"}//not IE
alert( JSON.stringify( sheet[r] ) ); // {"20":"1"," ":"545"}//IE

当您使用诸如“”(空格)之类的属性名时,您不会将元素追加到数组中。您只是将命名属性添加到对象中。命名属性和数字索引数组属性没有定义的顺序。事实上,看起来你根本没有数组;这些只是简单的对象,这一点很清楚,因为它们是用大括号记录的


当然,JavaScript数组实例也是对象,但它们有特殊的行为。普通对象的属性没有定义的顺序,因此您不能期望系统(在记录对象时,或在
for…in
循环中,等等)以任何特定顺序显示它们。

或者用一句话概括您的问题:“为什么
JSON.stringify()
在IE中以不同于其他浏览器中的
JSON.stringify()
的顺序列出对象属性?好的,观察得很好。但显示时的结果数据(UI表)也是向后的。我不知道你是否能看到这一点,但这是它的一个图像。一旦它建成,有没有办法对它进行排序?如果你需要按特定顺序排列的键/值对,你可以将它们作为单独的对象放入一个数组中,像这样:
[{”“:“545”},{“20”:“1”}]
,或者使用两个数组
[”“,“20”]
[“545”,“1”]
,或者让您的原始对象
{”“:“545”,“20”:“1”}
与一个关联的数组,该数组按所需的顺序提供键
[”“,“20”]
。我明白您的意思。在这种情况下,它将无法工作,因为我正在构建的数据是针对需要对象的JSUI表的。我可以查看表格的排序。@user2144480是的,对表格进行排序可以。实际上没有办法强制对对象属性进行排序;它全部由运行时管理,规范不要求它担心这一点。