2015-11-17 21 views
1

所以我所擁有的是一個動態生成的測驗。我想要測驗問題隨機排列。基本上,i是從0到answerArray的長度。我希望它做到這一點,但不是隨機的。例如:而不是0,1,2,3,4,5我想要1,0,2,3,5,4。我嘗試過這樣做,但我所有的嘗試都失敗了。如果我能做到這一點,這將是非常有益的,所以測試問題並不總是合適的。謝謝。運行for循環並隨機更改一個範圍內的變量值,但滿足所有變量

var displayAnswers = function(){ 
for (var i = 0; i<answerArray.length;i++){ 
var row1= document.createElement("div"); 
$(row1).addClass("row"); 
var colmd= document.createElement("div"); 
$(colmd).addClass("row"); 
$(colmd).addClass("text-center"); 
$(colmd).addClass("rowtxt"); 
$(colmd).attr('id',"questionTxt"+[i+1]); 
$("#contain").append(row1) 
$(row1).append(colmd); 
var answer = answerArray[i]; 
} 
+0

你的'answerArray'是什麼樣的?舉個例子,也許? –

回答

1

您可以在以下問題Generate unique random numbers between 1 and 100使用公認的答案,這將首先生成隨機數,並把它們存儲在陣列和內使用他們的循環。

例子:

var arr = []; 
var answerArray = ["Answer 1", "Answer 2", "Answer 3"]; 

while(arr.length < answerArray.length){ 
    var randomnumber=Math.ceil(Math.random() * answerArray.length) 
    var found=false; 
    for(var i=0;i<arr.length;i++){ 
     if(arr[i]==randomnumber){found=true;break} 
    } 
    if(!found)arr[arr.length]=randomnumber; 
} 

現在你有唯一編號的0answerArray長度之間的數組,你可以通過調用arr[i]使用內循環:

var displayAnswers = function(){ 
    for (var i = 0; i<answerArray.length;i++){ 
     var row1= document.createElement("div"); 
     $(row1).addClass("row"); 
     var colmd= document.createElement("div"); 
     $(colmd).addClass("row"); 
     $(colmd).addClass("text-center"); 
     $(colmd).addClass("rowtxt"); 
     $(colmd).attr('id',"questionTxt"+[i+1]); 
     $("#contain").append(row1) 
     $(row1).append(colmd); 

     //Here you get the unique number between 0 and answers length 
     var random_number = arr[i]; 

     var answer = answerArray[random_number]; 
    } 
} 

希望這幫助。

+0

非常感謝!它完美的作品! –

0

我會開始考慮你需要做什麼。

你想跟蹤你已經使用過的數字,如果你已經使用過一個新的數字,就得到一個新的數字。

嘗試類似這樣的東西。

// The initial array 
var Array = [1,2,3,4,5]; 

// The new array or tracking array 
var Used = []; 

// A function to generate the random index 
// We need a function so we can call it if 
// the index already exists to ensure we have 
// the same amount of values as the inital 
// array 
function addRandomNum(array) { 
    var random = Math.floor((Math.random() * Array.length) + 1);  
    if(array.indexOf(random) === -1){ 
     array.push(random); 
    } else { 
     addRandomNum(array); 
    } 
}; 

// Loop the inital array calling the function 
for(var i = 0; i < Array.length; i++){ 
    addRandomNum(Used); 
} 

// Look at the new randomized array 
console.log(Used); 
0

如果這是你想要的,你可以洗牌數組。 有洗牌的功能,如果你遵循的CSS-招數此鏈接: https://css-tricks.com/snippets/javascript/shuffle-array/

我喜歡技術2.它使用排序功能來隨機創建,將根據返回的值對項目進行排序負或正數。 如果返回值爲正數,則第一項將在傳遞給函數的第二項之前。正如你所看到的,這些參數未被使用,因爲我們不需要邏輯排序,而是基於隨機數進行隨機化。

你可以這樣調用它:

answerArray.sort(function(item1, item2) { return 0.5 - Math.random() });

0

好吧,我將承擔一些事情。你answerArray看起來是這樣的:

var answerArray = [ 
    { 
     "q_id": "1", 
     "prompt": "Is StackOverflow awesome?", 
     "a1": "Yes", 
     "a2": "No", 
     "correct": "a1" 
    } 
]; 

首先添加這樣

"random": Math.floor(Math.random() * 101) 

屬性這將創建一個隨機數,你可以用它來排序的數組,像這樣:

answerArray.sort(function(a, b) { 
    return parseFloat(a.random) - parseFloat(b.random); 
}); 

這樣你可以隨機排列問題。