2014-10-06 68 views
-2

我试图让数字0-9随机顺序洗牌。 EX:2,4,0,1,3,5,9,7,8,6 ...目前它始于1而不是0. 这就是我正在使用的 - (我对js的了解是min 。)如何让此脚本返回数字0-9而不是1-10

<script type="text/javascript" language="Javascript"> 
function pick(n, min, max){ 
    var values = [], i = max; 
    while(i >= min) values.push(i--); 
    var results = []; 
    var maxIndex = max; 
    for(i=1; i <= n; i++){ 
     maxIndex--; 
     var index = Math.floor(maxIndex * Math.random()); 
     results.push(values[index]); 
     values[index] = values[maxIndex]; 
    } 
    return results; 
} 
function go(){ 
    var running = true; 
    do{ 
     if(!confirm(pick(10, 0, 9))){ 
      running = false; 
     } 
    }while(running); 
} 

</script> 

感谢您的输入...

+2

'for(i = 0; i <= n; i ++){'? – 2014-10-06 23:50:25

回答

3

可能更有利于在这里创造出更多的功能,为便于阅读,更容易调试。

// Creates the array [min, min+1, ..., max-1, max] 
function createRange(min, max) { 
    var range = []; 
    while (min <= max) { 
    range.push(min); 
    min++; 
    } 
    return range; 
} 

// Fisher-Yates Shuffle from http://bost.ocks.org/mike/shuffle/ 
// but you can replace this with your own shuffler if you want 
function yatesShuffle(array) { 
    var m = array.length, t, i; 
    while (m) { 
    i = Math.floor(Math.random() * m--); 
    t = array[m]; 
    array[m] = array[i]; 
    array[i] = t; 
    } 
    return array; 
} 

// Pick `n` numbers from the range `[min, ..., max]`. 
// `n` must be less than or equal to `(max - min)`. 
function pick(n, min, max) { 
    var range = createRange(min, max); 
    var shuffled = yatesShuffle(range); 
    return shuffled.slice(0,n); 
} 

function go(){ 
    var running = true; 
    do{ 
     if(!confirm(pick(10, 0, 9))){ 
      running = false; 
     } 
    }while(running); 
} 
+0

很好!但是这个'n'的论点看起来很没道理,因为如果'n'不等于范围的长度,你(和OP)会任意地取整个范围的上半部分或下半部分。 **编辑:**我的坏,我跳过你的'.slice()'线。但是,当你可以在一个较小的集合上工作时,为什么要建立全范围? – 2014-10-07 00:18:09

+0

我不确定我关注。 '(3,50,100)'可以用[94,52,79]来回应。并且,“pick(10,50,52)'像'[51,52,50]'一样回应。它只挑选'n'到可供选择的数字... – 2014-10-07 00:20:38

+0

是的,对不起我跳过了'.slice()'部分,但是当你可以在一个较小的集合上工作时, ? – 2014-10-07 00:23:22

相关问题