• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:javascriptで2つのArrayの同時ソート)

javascriptで2つのArrayを同時にソートする方法

このQ&Aのポイント
  • javascriptで2つのArrayを同時にソートする方法について教えてください。Array1の変化をArray2にも同時に適用する方法が知りたいです。
  • Array1とArray2には数値と文字列の情報が格納されています。数値を小さい順にソートする際に、それに合わせて文字列の情報も変化させたいです。
  • また、Arrayには多重Arrayも含まれています。それらを利用して同時にソートを行いたいです。具体的なプログラム例があれば嬉しいです。

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

  • ベストアンサー
回答No.1

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));

IWNM_SP
質問者

お礼

なんとかソートすることが出来ました。本当にありがとうございました。

その他の回答 (2)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

すでに回答がでていますが、タイプが少し違うもの… 普通の関数にしてあるので使い方は、  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);

IWNM_SP
質問者

お礼

なんとかソートすることが出来ました。本当にありがとうございました。

  • think49
  • ベストアンサー率59% (285/482)
回答No.2

// 全角空白は半角空白に置換してください。 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 (二次元配列) になっていればここまで面倒なことをしなくて済みます。

IWNM_SP
質問者

お礼

なんとかソートすることが出来ました。本当にありがとうございました。

関連するQ&A