随机播放for循环中的数组

时间:2018-04-02 12:58:02

标签: javascript arrays shuffle

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循环创建一个数组(测验),其中每个单独的数组都有自己的某个数组(测试)的随机顺序。 我在控制台日志中获得的是所有数组中的随机顺序。如何为每个单独的数组随机化/随机播放它?

1 个答案:

答案 0 :(得分:0)

以下是您所需的解决方案:

您必须克隆数组以便在不更改原始数组的情况下进行分配

使用,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);

请运行以上代码段

Here is a DEMO plunker for the same