随机化两个数组并输出相同的“随机化”结果

时间:2018-03-09 22:14:33

标签: javascript arrays

我使用JavaScript / jQuery随机选择两个数组列表,一个包含单词,另一个包含该词。

我希望每个加载在每个数组中从可用的10中选择5个,这样我就会遇到问题。

我能够将两个数组随机化,但我需要输出相同的“随机”结果,以便它们可以匹配两侧。

var match1 = ["1", "2",  "3", "4", "5", "6", "7", "8", "9", "10"]; 
var match2 = ["1", "2",  "3", "4", "5", "6", "7", "8", "9", "10"]; 

并且当前输出类似于

match1 = 2 5 7 8 3
match1 = 1 3 9 4 5

我需要这样的事情

match1 = 7 5 2 8 1
match1 = 7 5 2 8 1

我是JavaScript新手,对于凌乱的代码感到抱歉。

function createQuizLayout() {
    //this are the draggables (#leftCol)
    var match1 = ["1",
        "2",
        "3",
        "4",
        "5",
        "6",
        "7",
        "8",
        "9",
        "10"
    ];

    //this are drop target (#rightCol)
    var match2 = ["1",
        "2",
        "3",
        "4",
        "5",
        "6",
        "7",
        "8",
        "9",
        "10"
    ];


    function randomSort(min, max) {
        return (parseInt(Math.random() * 10) % 2);
    }

    (match1.sort(randomSort));
    (match2.sort(randomSort));

    var arrMatch1 = [];
    for (var i = 0; i < match1.length; i++) {
        arrMatch1.push('<li data-index="' + (i + 1) + '">' + match1[i] + '</li>');
        arrMatch1.length = arrMatch1.length < 5 ? arrMatch1.length : 5;
    }

    var arrMatch2 = [];
    for (var i = 0; i < match2.length; i++) {
        arrMatch2.push('<li data-index="' + (i + 1) + '">' + match2[i] + '</li>');
        arrMatch2.length = arrMatch2.length < 5 ? arrMatch2.length : 5;
    }

    //shuffle the arrays
    arrMatch1 = shuffle(arrMatch1);
    arrMatch2 = shuffle(arrMatch2);

    //insert them into DOM
    $('#source').html(arrMatch1.join(''));
    $('#target').html(arrMatch2.join(''));
}

function shuffle(v) {
    for (var j, x, i = v.length; i; j = parseInt(Math.random() * i), x = v[--i], v[i] = v[j], v[j] = x);

    return v;
}

1 个答案:

答案 0 :(得分:0)

我很确定你错过了如何以正确(相同)方式改组两个阵列 :)

看看这段代码:

&#13;
&#13;
var match1 = ["1", "2",  "3", "4", "5", "6", "7", "8", "9", "10"]; 
var match2 = ["1", "2",  "3", "4", "5", "6", "7", "8", "9", "10"]; 

var i=0, len= match1.length, next, order=[];
while(i<len)order[i]= ++i;
order.sort(function(){return Math.random()-.5});

for(i=0; i<len; i++){
    next=order[i];
    match1.push(match1[next]);
    match2.push(match2[next]);
}
match1.splice(1, len);
match2.splice(1, len);

console.log(match1)
console.log(match2)
&#13;
&#13;
&#13;

要更改阵列,请先获取随机排序,然后将新排列添加到现有阵列(match1)的末尾。

然后从索引1拼接出来将数组分成两个(相同方式改组)数组,长度完全相同。