簡體   English   中英

隨機化兩個數組並輸出相同的“隨機化”結果

[英]Randomize two arrays and output the same “randomized” result

我正在使用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;
}

我很確定您錯過了如何以正確的方式(相同)對兩個數組進行混編的部分:)

看一下這段代碼:

 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) 

要在適當的位置更改數組,請先獲得改組后的順序,然后將新排列添加到現有數組(match1)的末尾。

然后從索引1剪接出來,將數組分成長度完全相同的兩個數組(以同樣的方式改組)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM