javascript - 将 Questions 数组和 Answers 多维数组洗牌相同

标签 javascript arrays

好吧,事情是这样的;

现在我制作了这个网站,通过列出日语单词及其定义来更轻松地学习日语。我把日语单词放在 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/

相关文章:

c - 在 C 中,将文本文件读入结构数组,然后用该数组写入新的文本文件

javascript - 减少数组数组并从 Javascript 数据中删除 null

javascript - 如何恢复按钮颜色?

javascript - 使用后退按钮进行部分 Ajax 更新

ios - 实例方法 'appendInterpolation(_:formatter:)'要求 'Any'继承自 'NSObject'

c# - 将字符串拆分为单词数组

javascript - 从 html 中的 &lt;script&gt; 调用 CoffeeScript 定义的函数?

javascript - 递归过滤具有不同属性的对象数组

javascript - 是否可以使用 Gamepad API 在 javascript 中注册自定义游戏 handle ?

c - C 中的数据结构,指针为 : I want to store an array of information in each position