洗牌以循环制作的阵列



jsfiddle

        var test = [1, 2, 3, 4, 5]
        var Quiz = [];
        for (var i=0; i<5; i++){
            shuffle(test)
            Quiz[i] = {
                options: [],
                correct: Math.floor((Math.random() * 5) + 1)
            };
                for(quizS of Quiz){
                quizS.options.push = test
            }
        }
        console.log(Quiz);

        function shuffle(arra1){
            var ctr = arra1.length, temp, index;
            while (ctr > 0) {
                index = Math.floor(Math.random() * ctr);
                ctr--;
                temp = arra1[ctr];
                arra1[ctr] = arra1[index];
                arra1[index] = temp;
            }
            return arra1;
        }   

因此,我试图通过for循环创建一个数组(QUIZ(,在该循环中,每个数组都有从某个数组(test(中的随机顺序。我在控制台日志中得到的是所有数组中相同的随机顺序。如何为每个单独的数组随机化/洗牌?

这是您所需的解决方案:

您必须克隆阵列以分配它,而无需更改原始数组

使用, slice(0)到克隆数组。

var a = shuffle(test).slice(0)

var test = [1, 2, 3, 4, 5]
var Quiz = [];
var random = {};
function shuffle(arra1) {
    var ctr = arra1.length, temp, index;
    while (0 !== ctr) {
        index = Math.floor(Math.random() * ctr);
        ctr -= 1
        temp = arra1[ctr];
        arra1[ctr] = arra1[index];
        arra1[index] = temp;
    }
    return arra1;
}
for (var i = 0; i < 5; i++) {
    var a = shuffle(test).slice(0)
    Quiz.push({
        options: a,
        riktig: Math.floor((Math.random() * 5) + 1)
    });
}
console.log(Quiz);

请运行上面的摘要

这是相同

的演示plunker

相关内容

  • 没有找到相关文章

最新更新