- ベストアンサー
[javascript] 配列を使ってテーブルデータのソート
- javascriptで配列を使ってテーブルデータのソートをしたいです。
- 上記の配列をソートして特定の順序にしたいです。
- 数値の場合は問題ないのですが、文字列の場合にうまくソートできないようです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
しまった、きちんと検証してませんでした。 以下でうまくいくと思います。 list1.sort(function(a, b){return (a.t==b.t)?(a.n>b.n?1:-1):(a.t>b.t?1:-1);});
その他の回答 (2)
- Werner
- ベストアンサー率53% (395/735)
"a"-"b" の結果を確認してみましたか? 確認してみればこれでは比較できないことが分かると思います。 JavaScriptでは不等号で文字列の辞書順比較ができるので 横着せずに不等号で比較しましょう。 if文を使うなどして、 第1引数が第2引数より小さい(第1引数の方を前に並べたい)場合は負数、 同じ場合は0、 第1引数が第2引数より大きい場合は正数を返すようにするだけです。
補足
ご回答ありがとうございます。 list1.sort(function(a, b) {return (a.t > b.t) ? 1:-1||a.n -b.n}); としてみましたが、 a 2 a 3 a 1 b 2 b 1 となり、期待した結果が得られませんでした。 a 1 a 2 a 3 b 1 b 2 が期待してる結果です。 実は、 return (a.t > b.t) ? 1:-1||a.n -b.n と書いていますが、||の意味がよく解ってません。
- yambejp
- ベストアンサー率51% (3827/7415)
>list1.sort(function(a, b) {return a.t-b.t||a.n-b.n}); これって文字列を引き算してませんか? 文字列の比較も不等号がつかえるのでこうしてみては? list1.sort(function(a, b) {return a.t > b.t||a.n >b.n});
補足
ご回答ありがとうございます。 list1.sort(function(a, b) {return a.t > b.t||a.n >b.n}); としてみましたが、結果は a 2 b 1 a 3 a 1 b 2 となり、期待した結果は得られませんでした。
お礼
yambejpさん ご回答ありがとうございました。 期待した結果が得られました。