以前の記事でsort()メソッドを使ってコンテンツを並べ替えるjsをご紹介させていただきましたが、Chromeのみ他のブラウザと比べて若干ソート結果が異なるケースがあります。本記事ではsort()によるソートにおいて、Chromeのみソート結果が異なってしまった場合の対処方法についてご紹介させていただきたいと思います。前者のスクリプトを実行すると、日時単位でのソートは各ブラウザで問題なく行われます。Chromeのみ同じアイテム(サンプルの(1)~(5))については元の序列が維持されず、入れ替わりが起こってしまいます。0」値として返ってきた場合の挙動がChromeのみ順番が保証されなくなるようです。実案件でこのケースに遭遇した際は頭を抱えましたが、幸い今回日付(ミリ秒)による比較を行ったうえでの並べ替えでしたので、以下の方法で解決することができました。面白いロジックだなあと自分でも思いますが、思いがけない方法で解決することができました。後者のスクリプトでは、以下の記述を加筆しています。$liIndex;liのインデックス番号を変数$liIndexに格納しておきます。ミリ秒の値が既に格納されている変数dateをparseInt()で数値化し、$liIndexを減算します。0は返ってこなくなります。完全に数値による並べ替えが行われるためブラウザ間での差異はなくなり、ソート前の序列も維持されることになります。デモ実際に動作を確認できるデモページも公開しておりますのであわせてご確認ください。sort()によるソート実装を行うとChromeで正しくソートされない件について数値が小さい場合はこの方法で対処するのは難しいご紹介したケースのように、桁数の多いミリ秒(例:1502982000000)の場合は問題ありませんが、1~100など桁数の少ない数字では使えないでしょう。減算されるインデックス番号の数によっては数の大小が入れ替わってしまい、結果として正しいソート順にならない可能性が考えられるためです。同じ値をさらに配列化して対応する方法もあるみたいです実案件では採用を断念しましたが、同じ値を発見したらそれらをさらに配列化することで順番を定義し並べ替える、という方法でも対処できるようです。ところ以下のページが参考になりそうでしたので、リンク先をご紹介させていただきます。jsdo.itまとめChromeだけsort()の結果が異なる、というのは何年も前から起きている問題のようです。同じ値が存在しない前提のソートであれば特に気にする必要はないのですが、ご紹介したような、全く同じ日時や値の場合を考慮して各ブラウザのソート結果を同じにするには、代替手段を検討する必要があります。実装前にChromeだけ同じ値の序列は不定になってもかまわないですか、ということを関係者と握っておくのも一つので手ですかね。それで問題ないのであれば、対処する必要もなくなります。sort()によるソート実装でChromeだけソート結果が異なる事象に遭遇した際は、本記事がご参考になれば幸いです。ため、即時には反映されません。住宅ローン2019年5月7日さらに見る記事を書いている人フォローするRSSを購読するWebデザイナー/フロントエンド・エンジニアのMasaです。独学でWebデザインを勉強後Web業界へ就職し、今の会社に勤めて12年目になりました。2016年4月にマイホームを購入し、休日は芝生いじりと育児に励んでいます。