0

プッシュを使用せずに新しい列を動的に作成するとわかることから、IEでは逆方向に行われます。sheet[r].push() を実行してもうまくいかないので、他にこれを行う方法がわかりません。

これをコード フローで説明します。

 //{" ":"545"} current object.
 sheet[r][colN[elmt][ceeLineData.ColLabel].toString()] = dat[count + c].data;
 //{" ":"545","20":"1"} current object.

したがって、この行は何もせず、行データが「1」の「20」というタイトルの新しい列を追加するだけです。次のようなものです。

[" "]--["20"]//columns 0,1
["545"]["1"]//row 0

これは ff、safari、opera、chrome に当てはまりますが、IE ではこれを行いました

["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
4

1 に答える 1

1

" " (スペース) のようなプロパティ名を使用すると、配列に要素が追加されません。名前付きプロパティをオブジェクトに追加しているだけです。名前付きプロパティと数値インデックス配列プロパティには、定義された順序がありません。実際、とにかく配列すら持っていないようです。これらは中かっこでログに記録されているという事実から明らかなように、単なるオブジェクトです。

もちろん、JavaScript Array インスタンスもオブジェクトですが、特別な動作をします。for ... inプレーン オブジェクトのプロパティの順序は定義されていないため、(オブジェクトをログに記録するときやループなどで)システムによって特定の順序で表示されるとは期待できません。

于 2013-05-20T13:21:57.890 に答える