2016-03-19 85 views
0

我有此數組:遍歷隨機順序的所有元素一次

var numberArray = [1, 2, 3] 

使用jQuery,什麼是通過隨機的順序恰好一次這個數組中的所有元素循環的最簡單的方法?有效序列爲3,2,1,2,3,1,無效序列爲1,1,12,2,3

回答

3

我不知道具體的jQuery的方法隨機化的,但你可以在陣列成隨機順序遍歷排序即可。

$(function() { 
 
    var numberArray = [1,2,3]; 
 
    numberArray.sort(function() { 
 
     return 0.5 - Math.random(); 
 
    }) 
 
    $.each(numberArray, function(k,v) { 
 
     $('div').append(v); 
 
    }) 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div></div>

+0

謝謝,簡短而甜美! – ohyeah

0

這應該對你有用。現在,該腳本只是從JQuery的每個函數內打印出控制檯中的每個數組值,但是您可以從$ .each函數內輕鬆做出任何需要的操作。我沒有parseInt()$ .each循環內的數組值,所以如果你需要他們有一個數字類型,那麼你將不得不這樣做。

Live Example

//The array to randomize 
var numberArray = [1, 2, 3] 

//sort the array randomly and convert it back to an array so 
//that you can get the value of object inside the each function. 
var randomArray = numberArray.sort(randomSort).toString().split(","); 

//loop through the random array 
$.each(randomArray,function(){ 

    //log the value 
    console.log(this); 

}); 

/* randomSort function */ 
function randomSort(a,b) { 
    // Get a random number between 0 and 10 
    var temp = parseInt(Math.random()*10); 

    // Get 1 or 0, whether temp is odd or even 
    var isOddOrEven = temp%2; 

    // Get +1 or -1, whether temp greater or smaller than 5 
    var isPosOrNeg = temp>5 ? 1 : -1; 

    // Return -1, 0, or +1 
    return(isOddOrEven*isPosOrNeg); 
} 
+0

什麼是轉換爲字符串,然後轉換回的點? – charlietfl

+0

@charlietfl只允許ohyeah操作循環內的對象。 –

+0

感謝您的回答,我不知道排序功能。我已經嘗試過你的答案,鄧肯發佈的答案似乎也一樣。使用更復雜的隨機發生器比另一個更有用嗎? – ohyeah