アプリ版:「スタンプのみでお礼する」機能のリリースについて

javascriptをしています。そしてArrayを2つ用意してArray1の変化をArray2にも同時に適用しながらソートしたいと考えているのですが、どんな方法で実行すればよいのか分かりません。
例としまして

4 あ     2 お
2 お     4 あ
6 う  →  5 い
5 い     6 う
7 え     7 え

という具合に、Array1には4,2,6,5,7がありArray2にはあおういえという情報がはいっています。
そしてArray1の数値を小さい順に並べ替えるのと同時にそれに合うようにArray2の情報も変えるということがしたいのです。
Arrayには多重ArrayというArray[0][1]というのもありますが、これも使えるのでしょうか?

アドバイスでもありがたいですが、プログラムの具体例を上げてくれると更にありがたいです。
よろしくお願いします。

A 回答 (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));
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/03/16 23:42

すでに回答がでていますが、タイプが少し違うもの…



普通の関数にしてあるので使い方は、
 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);
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/03/16 23:42

// 全角空白は半角空白に置換してください。



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 (二次元配列) になっていればここまで面倒なことをしなくて済みます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/03/16 23:42

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