- ベストアンサー
javascriptで2つのArrayを同時にソートする方法
- javascriptで2つのArrayを同時にソートする方法について教えてください。Array1の変化をArray2にも同時に適用する方法が知りたいです。
- Array1とArray2には数値と文字列の情報が格納されています。数値を小さい順にソートする際に、それに合わせて文字列の情報も変化させたいです。
- また、Arrayには多重Arrayも含まれています。それらを利用して同時にソートを行いたいです。具体的なプログラム例があれば嬉しいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
var A = [ 4, 2, 6, 5, 7 ]; var B = [ 'お','あ','い','う','え' ]; function merge (a, b) { var result = []; var len = a.length; for (var i = 0; i < len; i++) result[i] = [a[i], b[i]]; return result; } function sortCbFunc (a, b) { return (a[0] > b[0]) - (a[0] < b[0]); } alert (merge (A, B).sort (sortCbFunc)); alert ([ [4,'お'], [2,'あ'], [6,'い'], [5,'う'], [7,'え'] ].sort (sortCbFunc));
その他の回答 (2)
- fujillin
- ベストアンサー率61% (1594/2576)
すでに回答がでていますが、タイプが少し違うもの… 普通の関数にしてあるので使い方は、 sortArray( 配列,[配列],[配列]・・・ ) となります。(配列数は可変) (全角空白は半角に) function sortArray(){ var a = arguments, n = a.length; if(n == 0) return; var ary = [], i, j, f = false, len = a[0].length; for(i=0; i<n; i++) f = f || Object.prototype.toString.call(a[i])!="[object Array]" || len != a[i].length; if(f) throw new Error("lengths of arrays are not same"); for(j=0; j<len; j++){ ary[j] = []; for(i=0; i<n; i++) ary[j].push(a[i][j]); } ary.sort(); for(j=0; j<len; j++) for(i=0; i<n; i++) a[i][j] = ary[j][i]; } var A = [ 4, 4, 4, 3, 3 ,3]; var B = [ 'お','あ','い','う','え','う']; var C = [ 4, 1, 3, 5, 7, 4]; sortArray(A, B, C); alert(A + "\n" + B + "\n" + C);
お礼
なんとかソートすることが出来ました。本当にありがとうございました。
- think49
- ベストアンサー率59% (285/482)
// 全角空白は半角空白に置換してください。 function Hoge (array1, array2) { this.array1 = array1; this.array2 = array2; return this; } Hoge.prototype.sort = function () { var array1, array2, array3, array, i, l; array1 = this.array1; array2 = this.array2; array3 = []; if (array1.length !== array2.length) { throw new RangeError('array1.length isn\u0027t equivalent to array2.length'); } for (i = 0, l = array1.length; i < l; ++i) { array3.push([array1[i], array2[i]]); } array3.sort(); for (i = 0, l = array3.length; i < l; ++i) { array = array3[i]; array1[i] = array[0]; array2[i] = array[1]; } }; var array1 = [4,2,5,6,7]; var array2 = ['お','あ','い','う','え']; var hoge = new Hoge (array1, array2); hoge.sort(); alert(hoge.array1); // [2, 4, 5, 6, 7] alert(hoge.array2); // ["あ", "お", "い", "う", "え"] // (備考) 初めから array3 (二次元配列) になっていればここまで面倒なことをしなくて済みます。
お礼
なんとかソートすることが出来ました。本当にありがとうございました。
お礼
なんとかソートすることが出来ました。本当にありがとうございました。