2012-04-16 19 views
0

javascriptを使用していて、2つの配列が同じインデックス位置になるように2つの配列を同期しようとしています。2つの配列を同じ方法でランダム化します。

var array1 = ["word1","word2","word3","word4","word5"]; 
    var array2 = [1,2,3,4,5]; 

    array2.sort(function(){ return Math.random() -.5}); 

このスクランブルは、今私が同じ順序取得する配列1を必要とする[2,3,1,5,4]

のようなものに配列2:私はこれをどのように行うことができます["word2", "word3", "word1", "word 5", "word4"]

を?

+2

価値のある読書:[配列をシャッフルするためにArray.sort()を使用しないでください](http://sroucheray.org/blog/2009/11/array-sort-should-not-be-used-to- shuffle-an-array /) –

答えて

0

何かがそれを行うには非常に単純な方法でなければなりません:

//assume array1 is like in your example and 
//array2 is the result of the randomization 
var result = []; 
for(var i = 0; i < array2.length; i++) { 
    result[i] = array1[array2[i]]; 
} 
+0

これは魅力的に機能しました!ありがとうございました! :) – mezzie

+0

元の配列は0から4のインデックスを持ち、2番目の値は1から5の値を持ちます。つまり、インデックスは値と一致しません。 – RobG

+0

@RobGをよく目にした。元の配列の番号を変更するか、インデックスにアクセスすると簡単に修正できます。 –

0

連想配列を使用します。次にキーをシャッフルして(最終的には3番目の配列として)、最初の2つの配列をそれに応じて並べ替えます。

EDIT:申し訳ありませんが、私はこれをPHPとjavascriptではなく読んでいます。私の間違い。配列の代わりにオブジェクトを使用するかもしれません。このような

2

あなたは異なる構造を使用した方が良いでしょう。すなわち

[{k: 1, v:'word1'}, {k: 2, v:'word2'}] 

、代わりに

0

あなたが一緒に両方の配列に値をリンクする必要がありますことをソートします。これを行う簡単な方法は、それらを第3の配列に入れることです。pairs[index] = [ array1[index], array2[index] ]。同じようにこのペアの配列をソートしてから、ペアを元の配列に戻します。