javascriptでの3次元配列のソートについて

このQ&Aのポイント
  • javascriptでの3次元配列のソートについて解説します。配列のデータ構造やソート条件について説明し、ソートを行うための方法を探ります。
  • 質問文では、商品のデータが3次元配列に格納されている状況が説明されています。工場ごとに課別に商品データが格納されており、その中で値段のソートを行いたいとのことです。
  • javascriptのビルトイン関数であるsortを使ってソートを試みましたが、うまくいかなかったとのことです。ソートの方法について、アドバイスをお願いしたいとのことです。
回答を見る
  • ベストアンサー

javascriptでの3次元配列のソート

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をなんとか使えないものかとやってみましたがなかなかうまく いきません。 お知恵をお借りしたいです!!

質問者が選んだベストアンサー

  • ベストアンサー
  • susie-t
  • ベストアンサー率86% (37/43)
回答No.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]となるわけです。 クロージャの考え方はちょっと分かりにくいかもしれませんが、この場合はこういうものと覚えてしまってください。

suucha
質問者

お礼

バッチリです。 ありがとうございました! arrWk[0] = arrWk[0].sort(function(a, b){ return a[3] - b[3]; }); が、ミソでしたね。。

関連するQ&A

  • 2次元配列のソート

    2次元配列のデータをソートしたいのですが方法がわかりません。初歩的な質問ですが、ご存知の方、よろしくお願いいたします。 (例) 商品コード、商品名、金額、有効期限のデータを以下のように持っています。 $data[0] = ("001", "商品A", 5200, "2004/5"); $data[1] = ("002", "商品B", 350, "2005/1"); $data[2] = ("003", "商品C", 10800, "2004/3"); ・・・・ データの項目(商品コード、商品名など)数は固定ですが、データ数、内容は変化します。 2次元配列でデータがあり、商品コードで降順にソート、金額で昇順にソートなどのソートを行う方法はありますか? No.760468 で同じような質問があり、array_multisort が回答としてあがっていましたが、上記データの場合ソートできないようなので質問させていただきました。 なお、環境によりデータベースを使用することはできません。

    • ベストアンサー
    • PHP
  • 2次元配列のソート

    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 2次元配列のソート $aは2次元配列で、2次元目は連想配列です。 $aの実際の値は以下です。 ('苗字'=>'いけだ', '名前'=>'せいじ'), ('苗字'=>'たなか', '名前'=>'えつし') 2次元目の'名前'でソートを実行し、以下のように整列させるソースを教えてください。 ('苗字'=>'たなか', '名前'=>'えつし'), ('苗字'=>'いけだ', '名前'=>'せいじ') xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

    • ベストアンサー
    • PHP
  • JavaScriptの多次元ソートについて

    JavaScriptの多次元ソートについて こんにちは。 現在このJavaScriptにArray型にそれぞれソートをかけたいのですが、どのようにすべきでしょうか? var list = [ {1,Aさん,6,.473,19,9,2,0,1,14,3,2,5,0,5,.583,.736} {2,Bさん,5,.294,17,5,3,0,2,14,4,1,4,0,4,.428,.823} {3,Cさん,6,.333,21,7,1,0,0,8,2,0,2,0,2,.391,.380} {4,Dさん,6,.272,22,6,1,0,0,7,4,3,1,0,2,.304,.318} {5,Eさん,6,.545,22,12,3,1,1,20,15,1,2,0,1,.583,.909} ] お分かりになりましたらよろしくお願いします!

  • 多次元配列のソートの仕方について

    Arrayクラスにsortというメソットについて質問です。 配列が多次元の場合、そのどれか1次元についてソートしたいのですが使い方がわからなく質問しました。 たとえば、a[n][m]という配列で a[0][0]=4 a[0][1]=3         a[0][0]=4 a[0][1]=3 a[1][0]=5 a[1][1]=5    →    a[1][0]=7 a[1][1]=4 a[2][0]=7 a[2][1]=4         a[2][0]=5 a[2][1]=5 だとします。 この配列をmの値が1のときについて最初の[n]をソートしたいです。 そして、mの値が0の値も[1]でソートしたものと一緒にソートしたいです。

  • 二次元配列のソート PHP

    タイトルのとおりソートを行ってくれる関数を探しております。 $buf[][]の二次元配列の変数を日付の降順に並べ替えたいのですが、そういった関数は用意されていますか? sort()、rsort()では不可能かと思います。 以下、二次元配列の値です。配列三番目の日付の降順で再格納したいです。 ( [0] => Array ( [0] => 1[1] => name1 [2] => 2006-08-18 ) [1] => Array ( [0] => 2 [1] => name2[2] => 2006-08-28 ) [2] => Array ( [0] => 3[1] => name3 [2] => 2006-08-18 ) [3] => Array ( [0] => 4 [1] => name4[2] => 2006-08-18 ) よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 多次元配列のソートについて

    名前とテストの点, クラスが格納されている 以下のような多次元配列があるとします。 $data[0][0] = 'yamada'; $data[0][1] = '20'; $data[0][2] = 'B'; $data[1][0] = 'katoh'; $data[1][1] = '45'; $data[1][2] = 'A'; $data[2][0] = 'honda'; $data[2][1] = '15'; $data[2][2] = 'E'; $data[3][0] = 'ooyama'; $data[3][1] = '100'; $data[3][2] = 'C'; 上記の配列を得点順にソートして表示したいのですが どのようにすればうまく(昇順、降順)で表示できるのでしょうか?

    • 締切済み
    • PHP
  • 多次元配列のソートについて

    始めまして。 多次元配列のソート方法について分からないことがある為教えていただけないでしょうか。 $a[0] = array('2007/3/1','あ100','その他'); $a[1] = array('2007/3/1','あ200','その他'); $a[2] = array('2007/3/2','あ200','その他'); $a[3] = array('2007/3/2','あ300','その他'); $a[4] = array('2007/3/3','あ50','その他'); 上記のような配列があった場合、usort関数でやると、日付かその後ろの数値の値を元にソートできますが、両者の関係を持たせたソートは可能でしょうか。 結果としては $b[0] = "2007/3/3 あ50"; $b[1] = "2007/3/2 あ200"; $b[2] = "2007/3/2 あ300"; $b[3] = "2007/3/1 あ100"; $b[4] = "2007/3/1 あ200"; というようにしたいのです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 多次元配列でソートしたい

    たとえば、Yahooオークションとかで、「商品名」「価格」「残り日数」が表示されていて、 それぞれをクリックすると、その列をソートして全体を昇順・降順に並べ替えてくれますよね。 あれを自前のCGIで実現したいのです。 たとえば、3次元配列$hoge[X][Y][Z]を定義し、ここがクリックされたらXをキーにソート、ここがクリックされたらYでソートということをやりたいと思っているのですが、当然こういう機能は無いわけで、自分で作らなくてはいけません。 連想配列とかポインタとか色々考えたのですが、うまく行かず・・・。 どのような実装方法があるでしょうか、アイデアをお聞かせ願えたら嬉しいです。

    • ベストアンサー
    • Perl
  • 多次元配列の並び変えについて

    <?php $food["a"]["1"]= "hoge1"; $food["b"]["2"]= "hoge2"; $food["c"]["3"]= "hoge3"; $food["d"]["4"]= "hoge4"; ?> 上記の配列について、1,2,3,4のキーの順番でソートしたいのですが、うまく出来ません。 一次元配列だと簡単なのですが、二次元配列だとどうやったらよいのでしょうか? array_multisortを使うと、多次元でも並び変えはできると他のサイトで読みましたが、 これは結局値でソートしてますよね? 私は純粋にキーのみでソートしたいのですが、色々調べているのですがどうも複雑なプログラムを 書かないとできないような気がしてきました。

    • 締切済み
    • PHP
  • 多次元配列のソート

    過去に同様の質問があったのですが、未回答でしたので質問させていただきます。 多次元配列のうちの一つの列の値でソートし、その他の列にも結果を連動させたいのですが方法が分かりません。 たとえば、a[n][m]という配列で a[0][0]=C a[0][1]=う         a[0][0]=A a[0][1]=あ a[1][0]=A a[1][1]=あ   →    a[1][0]=B a[1][1]=い a[2][0]=B a[2][1]=い         a[2][0]=C a[2][1]=う というように、n列でソートしm列でもその結果で並べ替えたいです。 恐らくComparatorインタフェースを使用すると可能かと思うのですが、方法を教えて頂けないでしょうか。

    • ベストアンサー
    • Java

専門家に質問してみよう