kazu22002の技術覚書

PHPer, Golang, AWS エンジニアの日々

jqueryのeachはブラウザ依存があるのかな

jqueryのeachを使用して、データをループさせていることがよくあります。

今回セレクトを表示させていたところ、順番が期待通りにならない現象が発生。

ついでに、ブラウザで表示がちがったり、更新すると治ったりしました。。。

いやー意味がわからない現象でしたが、原因はjqueryのeach部分っぽい。。。

そこまでの調査の経緯を載せてみます。

1.SQLの段階では間違っていない。

SQLで持ってきている段階では、一定の順番になり、間違っているわけではない。

SQLで持ってくる際に、更新とかが影響していて順番が変わっているかもしれないとかおもって調べても関係ない。

まぁ、ORDERをしっかり設定していれば問題ない。

2.javascriptJSONパースが影響しているのかな?

JSONパースは関係ない。そのままの配列の順番で作成をしてくれている。

console.logとかで見てみた。

3.each部分が原因っぽいぞ

eachの部分でログを出すと、順番が変わっている。。。

あー、ここか~。。。と。

だが、これだけでブラウザでみて変わる原因がわからない。というか、eachが怖くて使えなくなってしまう。

順番に影響をしているのはどこか??

というところで、直接的な部分は連想配列か普通の配列としての認識がされるかに依る部分が影響だったみたいです。

javascript連想配列

連想配列のkeyの部分がすべて数字だったため、ただの配列扱いになってしまったんだろうか。と。

まぁ、なんとなく理解。。。

javascript連想配列自体はあるので、問題ない。というか、プロパティになるのかな。

javascriptのオブジェクトの概念をしっかりと理解しているわけではないので、不安いっぱい。

オブジェクトとして作成されて、プロパティとして参照できる。これが連想配列として利用できているわけですかね。。。

var hoge = {"abc":123, "def":456}

// 連想配列みたいな書き方
a = hoge["abc"];

// オブジェクト.プロパティみたいな書き方
b = hoge.abc;

aとbが同じ値で取れる。はず。

簡単に試せるjavascriptは面白い。

参考

www.ajaxtower.jp

jqueryだが、ブラウザ依存??

これはあるんだろうか???

クロスブラウザとしての絶対的信頼を置いていた部分なため、かなり気になっている部分である。

まぁ、ありえるかな。プログラムだし。

そういえばECMAScript準拠っていまどうなってるんだろ。。。

javascript自体、標準的な関数があるにはあるが、絶対ではないためいろいろ苦労してきたけど、jqueryで感動したことは覚えている。

でも、そろそろAngularかbackboneとかを試したほうがいい気がしています。

時代が変わってきてますね。絶対。

連想配列とeachについて

原因がわかったので、今後の対策は取れそうです。

ただわすれた時にやらかしそうなので、残しておけたらなぁ。と。

かなりちゃんとしらべている人がいました。参考にした内容です。

d.hatena.ne.jp

JavaScriptでJSON形式のデータを順番に配列に格納する方法について|プログラミング