重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

javascriptでの3次元配列のソートについてです。
データ:
arrWk[0][0][0] ~ arrWk[5][5][5]の枠があり、

arrWk[*][*][0]が商品のID、
arrWk[*][*][1]が商品の大きさ、
arrWk[*][*][2]が商品の保管場所、
arrWk[*][*][3]が商品の値段、
arrWk[*][*][4]が商品の色、
arrWk[*][*][5]が商品の製造日付はいっているとします。

arrWk[0~5]が工場別、arrWk[][0~5]がその工場内の課別になって
おります。
このとき、ある工場内における商品の値段のソートを行いたいです。

arrWk[0][][]がA工場、arrWk[0][0~5][]がA工場の01課、02課・・・
として、A工場における商品値段のソートですので、
ソート前 arrWk[0][0から5][]だったのが、
ソート後 arrWk[0][3,2,5,0,4,1][]の順番で新しい配列に
格納されたいです。
長々でしたが、自分なりにjavascriptのビルドイン関数の
sortをなんとか使えないものかとやってみましたがなかなかうまく
いきません。
お知恵をお借りしたいです!!

A 回答 (1件)

3次元配列のソートというより、arrWk[0]以下がソートできればよいということであれば2次元配列のソートですね。

以下例です。
-------------------------------------------------
var arrWk = [
[
["id10", 10, "p10", 13, "c10", "2008/01/10"],
["id11", 11, "p11", 15, "c11", "2008/01/11"],
["id12", 12, "p12", 11, "c12", "2008/01/12"],
["id13", 13, "p13", 10, "c13", "2008/01/13"],
["id14", 14, "p14", 14, "c14", "2008/01/14"],
["id15", 15, "p15", 12, "c15", "2008/01/15"]
],[
["id20", 20, "p20", 23, "c20", "2008/01/20"],
["id21", 21, "p21", 25, "c21", "2008/01/21"],
["id22", 22, "p22", 21, "c22", "2008/01/22"],
["id23", 23, "p23", 20, "c23", "2008/01/23"],
["id24", 24, "p24", 24, "c24", "2008/01/24"],
["id25", 25, "p25", 22, "c25", "2008/01/25"]
]
]

arrWk[0] = arrWk[0].sort(function(a, b){
return a[3] - b[3];
});

var str = "";
for(var i = 0; i < arrWk[0].length; i++){
str += arrWk[0][i].toString() + "\n";
}
alert(str);
-------------------------------------------------
重要なのは
=================================================
arrWk[0] = arrWk[0].sort(function(a, b){
return a[3] - b[3];
});
=================================================
の部分。sortメソッドに渡すクロージャ(関数)はsortの処理内部で要素間の比較に使用されます。第一引数が前、第二引数が後。この関数が正数を返却すると、その順序を入れ替えます。これを繰り返してソートしています。なので、return a[3]-b[3]となるわけです。
クロージャの考え方はちょっと分かりにくいかもしれませんが、この場合はこういうものと覚えてしまってください。
    • good
    • 0
この回答へのお礼

バッチリです。
ありがとうございました!

arrWk[0] = arrWk[0].sort(function(a, b){
return a[3] - b[3];
});
が、ミソでしたね。。

お礼日時:2008/01/17 15:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!