2012-04-16 113 views
0

我使用javascript和尝试同步两个数组,这样两个数组具有相同的索引位置。随机化两个数组以相同的方式,JavaScript的

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

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

这打乱数组2成类似[2,3,1,5,4]

现在我需要阵列1得到同样的顺序:["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 /) – 2012-04-16 11:23:17

回答

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 2012-04-16 11:57:42

+0

原始阵列具有索引0至4,第二个值1至5,即,索引不匹配的值。 – RobG 2012-04-16 12:16:38

+0

@RobG很好的发现。虽然可以通过调整原始数组中的数字或访问索引时轻松修复。 – 2012-04-16 13:21:32

0

使用关联数组。然后将密钥(最终作为第三个数组)重新排序并相应地重新排列前两个数组。

编辑:对不起,我看这是PHP和JavaScript不。我的错。也许使用对象而不是数组。

2

你会使用不同的结构的更好。即

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

和排序,与其

0

您需要在两个数组连接在一起的值。简单的方法是将它们放在第三个数组中,如此pairs[index] = [ array1[index], array2[index] ]。按照您所做的顺序对这个对数组进行排序,然后将对分割回原始数组。

相关问题