javascriptで配列を使ってテーブルデータのソートをしたいです。
[
{"t":"a", "n":1},
{"t":"b", "n":1},
{"t":"a", "n":2},
{"t":"a", "n":3},
{"t":"b", "n":2}
]
上記をソートして下記の様にしたいです。
{"t":"a", "n":1},
{"t":"a", "n":2},
{"t":"a", "n":3},
{"t":"b", "n":1},
{"t":"b", "n":2}
]
以下の様に書いてみました。
<html>
<head>
<SCRIPT LANGUAGE='JavaScript1.2'><!--
var list1 = [
{"t":"a", "n":1},
{"t":"b", "n":1},
{"t":"a", "n":2},
{"t":"a", "n":3},
{"t":"b", "n":2}
];
list1.sort(function(a, b) {return a.t-b.t||a.n-b.n});
var text1="";
for(var i=0; i<list1.length; i++) {
text1 += "<br>" + list1[i].t + " " + list1[i].n;
}
function init(){
document.getElementById("o").innerHTML = text1;
}
//--></script>
</head>
<body onload="init()">
<div id="o"></dev>
</div>
</html>
実行すると下記の様に表示されました。
a 1
b 1
a 2
b 2
a 3
期待してる結果は以下です。
a 1
a 2
a 3
b 1
b 2
なにが悪いのでしょうか?
因みに、テーブルデータが以下の様に数値だけのの場合、
var list1 = [
{"t":1, "n":1},
{"t":2, "n":1},
{"t":1, "n":2},
{"t":1, "n":3},
{"t":2, "n":2}
];
実行結果は
1 1
1 2
1 3
2 1
2 2
の様になりました。
数値の場合、
list1.sort(function(a, b) {return a.t-b.t||a.n-b.n});
の式で問題ないのでしょうが、
文字列の場合、この式ではダメなんだろうなと考えてます。
以上、よろしくお願いいたします。
No.2
- 回答日時:
"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
と書いていますが、||の意味がよく解ってません。
No.1
- 回答日時:
>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
となり、期待した結果は得られませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript GoogleChart 階層ごとのブロックの長さを個別に設定したい 1 2022/07/06 14:27
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
関数でy=g(x)のgとは何の略です...
-
functionから別のfunctionを実...
-
jQueryでzipを解凍読み込みする...
-
idを使わずにonclickで自身の要...
-
getElementByIdを使用したグロ...
-
Matlabで自作関数をオーバーロード
-
CDの曲をケータイのSDに移す
-
jqueryの変数を関数の外に出す方法
-
一つのアクションで関数を二つ...
-
javascript(jQuery)でセル内...
-
jQuery 同じ処理を関数にまとめ...
-
jQueryの :not() .not() が有効...
-
JAVAスクリプトで指定時間以降...
-
Javascriptで引数の参照渡しか...
-
即時関数でプライベート変数的...
-
jQuery|:not(:animated)
-
google apps scriptの終了のさせ方
-
同じIDで定義した要素の配列を...
-
C#OpenCv V4にのエラーに関する...
-
javaScriptのコードの修正をお...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
idを使わずにonclickで自身の要...
-
functionから別のfunctionを実...
-
関数でy=g(x)のgとは何の略です...
-
jslintのエラーについて質問
-
クリックすると上に開くアコー...
-
XMLHttpRequestでキャッシュを...
-
ajax反映後のjqueryが動かない
-
要素名がスペースを含む場合のj...
-
function(e)の意味を教えてくだ...
-
jQueryの :not() .not() が有効...
-
jQueryでzipを解凍読み込みする...
-
getElementByIdを使用したグロ...
-
関数名をテキストから読み込む...
-
jqueryuiのdialog
-
addEventListener()でリスナー...
-
jqueryのグローバル変数とロー...
-
jQuery 同じ処理を関数にまとめ...
-
drawImageの描画順序の指定につ...
-
XMLHttpRequestオブジェクトが...
-
jQueryが読み込めない
おすすめ情報