• ベストアンサー

配列のソートについて

配列をソートした時、もともとデータのあった配列番号を記憶しておきたいのですが いい方法はないでしょうか (31,55,84,20,96,14); //1 2 3 4 5 6 ↓ (14,20,31,55,84,96) //6 4 1 2 3 5    ※ソート前の配列番号 いくつかの行(配列A)の、違う列にあるデータを抜き出して配列Bにまとめた後、配列Bをソート その後、配列Bのもともとの順番の位置の行にあるデータを上からコピーしていく感じで行ごとのソートを考えています イメージはこんな感じです a[0]=[1,512,200]; a[1]=[3,100,1]; a[2]=[4,100,265]; a[3]=[8,300,1]; //ソート対象を抜き出す b[0]=a[0][1]; b[1]=a[1][2]; b[2]=a[2][0]; b[3]=a[3][1]; b.sort(); c[0]=a[b[0]のソート前の配列番号]; c[1]=a[b[1]のソート前の配列番号]; c[2]=a[b[2]のソート前の配列番号]; c[3]=a[b[3]のソート前の配列番号];

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

sortの引数に関数を指定できるのでこれでソートするのが常套。 一度テンポラリに受けてソートしてからcに代入します。 <script> a=[[1,512,200],[3,100,1],[4,100,265],[8,300,1]]; b=[1,2,0,1]; temparray=new Array; for(var i=0;i<a.length;i++){ temparray[i]={"key":a[i][b[i]],"val":a[i]}; } temparray.sort(keysort); c=new Array; for(var i=0;i<temparray.length;i++){ c.push(temparray[i].val); } for(var i=0;i<c.length;i++){ alert(i+":"+c[i]); } function keysort(x,y){ if(x.key == y.key) return 0; return x.key>y.key?1:-1; } </script>

その他の回答 (1)

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

とてもシンプルに考えればいいのよ。 (31,55,84,20,96,14); とあわせて、index配列 (0,1,2,3,4,5); を用意するの。 ただそれだけ。

関連するQ&A