好吧,事情是这样的;
现在我制作了这个网站,通过列出日语单词及其定义来更轻松地学习日语。我把日语单词放在 lesson1.txt 里,答案放在 lesson1answers.txt 里,顺序是一样的。我在 php 中读出它们并将它们放在 javascript 中的数组中。
现在的问题是,每次我启动该站点时,这些数组的顺序都相同,这对我来说很烦人,因为我一直在寻找答案的地点,而且我什至不读日语单词(该死的我们的人类脑筋!)。所以我认为解决这个问题的最佳方法是随机化两个数组的元素,但它们都必须以相同的模式随机化,否则问题不再与答案正确对应。
我有一个数组是多维的。该数组首先包含代表我从 .txt 文件中读出的行的元素。该行中有多个字符,因此数组的第二个元素代表每个字符(不要问我为什么这样做,这与我无法在php中读出日文字符并直接将它们放入js有关) .另一个数组就是我保存答案的数组。
所以我有 AnswersArray();和 JapaneseCharactersArray();
我已经被这个问题困了一整天了,请有人帮忙或给个提示..
最佳答案
您应该将它们合并到一个对象数组中:
// assuming AnswersArray.length == JapaneseCharactersArray.length
var array = [];
for (var i=0; i<AnswersArray.length; i++)
array[i] = {
answer: AnswersArray[i],
japanese: JapaneseCharactersArray[i]
};
现在你只有一个数组,每一项包含一个单词的所有信息。您可以轻松shuffle现在。
然后您将在代码的更下方使用 array[x].answer
而不是 AnswersArray[x]
。
当然,您可以调整您的 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);
关于javascript - 将 Questions 数组和 Answers 多维数组洗牌相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11570276/