2012-07-19 31 views
1

好吧,事情就是這樣;隨機播放問題數組和答案多維數組相同

現在我通過製作日文單詞及其定義列表,讓我自己更輕鬆地學習日語。我將lesson1.txt中的日語單詞和lesson1answers.txt中的答案放在同一順序中。我在PHP中讀出它們並將它們放入JavaScript中的數組中。

現在的問題是,這些數組有相同的順序,每次我開始網站,這是非常討厭我,因爲我保持類似的位置,答案,我甚至不讀日語單詞(該死的我們人類的大腦!)。所以我認爲解決這個問題的最好方法是隨機化兩個數組的元素,但他們都必須以相同的模式隨機化,否則問題不再正確地對應答案。我有一個數組是多維的。該數組首先保存表示我從.txt文件讀出的行的元素。該行中有多個字符,因此數組的第二個元素表示每個字符(不要問我爲什麼要這樣做,它不得不在PHP中讀出日文字符並直接放入js中) 。另一個陣列只是我保留答案的數組。

所以我有AnswersArray();和JapaneseCharactersArray();

我一直停留在這個問題上,現在一整天,有人請幫助或給出提示..

+1

你能告訴我們一個樣本數組。我不是在看你在說什麼。 – frosty 2012-07-19 22:34:55

+0

所以AnswersArray是英文的,所以這就是爲什麼你使用非多維數組。什麼是日文字符數組()的索引?我的意思是它展示了JapaneseCharactersArray('325235235')(0)='3',JapaneseCharactersArray('325235235')(1)='2', – jeschafe 2012-07-19 22:38:00

+0

JapaneseCharactersArray [0] [0] =お JapaneseCharactersArray [ 0] [1] =お JapaneseCharactersArray [0] [2] =き JapaneseCharactersArray [0] [3] =い – user1534664 2012-07-19 22:41:03

回答

3

你應該把它們合併成一個對象數組:

// assuming AnswersArray.length == JapaneseCharactersArray.length 
var array = []; 
for (var i=0; i<AnswersArray.length; i++) 
    array[i] = { 
     answer: AnswersArray[i], 
     japanese: JapaneseCharactersArray[i] 
    }; 

現在你只有一個數組,每個項目包含單個單詞的所有信息。你現在可以很容易地shuffle

而不是AnswersArray[x]然後,您將在代碼中進一步使用array[x].answer


當然,你可以只調整您的fisherYates功能以同樣的方式來洗牌兩個或更多陣列:

function fisherYates(first/*, ... arrays */) { 
    var i = first.length, 
     argl = arguments.length; 
    if (i == 0) return false; 
    while (--i) { 
     var r = Math.floor(Math.random() * (i + 1)); 
     for (var j=0; j<argl; j++) { 
      var tempi = arguments[j][i]; 
      var tempj = arguments[j][r]; 
      arguments[j][i] = tempj; 
      arguments[j][r] = tempi; 
     } 
    } 
} 

// usage: 
> fisherYates(AnswersArray, JapaneseCharactersArray); 
+0

感謝隊友,我不是很熟悉JavaScript,所以我想試試這個。這似乎是一個很好的解決方案。 – user1534664 2012-07-19 22:42:43

+0

最好的解決方案似乎仍然是最好的,因爲它對我來說更清楚;)感謝您的努力和快速回復。 – user1534664 2012-07-19 22:58:57

0

雖然最好的方法可能是剛剛創建它們作爲一個單一的數組,另一種方法是創建一個與其他數組長度相同的新數組,其中數組中的每個項都是一個數字:1,2,3 ... n。但是不要按順序排列號碼,請使用Math.random()來隨機化他們的訂單。

然後通過新的數組環路這樣的:

for(i=0; i<AnswersArray.length; i++) { 
    AnswersArray[RandomArray[i]]; // whatever 
} 

另一種方法是隻要將整個行,當你隨機排列。