2011-03-01 19 views
3

我將如何生成(並單獨列出)javascript中唯一列對行列表? 我有兩個變量集,一些列和一些行數。我只希望每一對出現一次,並且它不能有0。說我有3行3列,我想:生成唯一行,列的隨機列表javascript

 
1,2 
3,1 
2,3 
1,3 
1,1 
2,1 
3,2 
2,2 
3,3 

所有以隨機順序。我將如何做到這一點?

+0

你想幹什麼?網格中的所有行 - 列對以某種順序寫出? –

+0

準確。隨機順序,最重要的是。 –

回答

1

不是我的算法雖然

<script type="text/javascript"> 

     var array = Array(); 

     var i,j; 

     for(i=1; i <= 3; i++){ 
      for(j=1; j<=3; j++){  
       array.push(j+', '+i); 
      } 
     } 
     var newarr = shuffle(array); 
     console.log(newarr); 
     document.write(newarr); 

    function shuffle(array) 
    { //v1.0 
     for(var j, x, i = array.length; i; j = parseInt(Math.random() * i), x = array[--i], array[i] = array[j], array[j] = x); 
     return array; 
    }; 
</script> 
+0

謝謝謝謝謝謝謝謝!像魅力一樣工作! –

+0

@Leticia邁耶歡迎您 –

1

您應該生成所有可能的座標對的數組,使用shuffling algorithm將它們放入隨機順序,然後將其打印出來。

+0

這個函數的javascript版本在哪裏?另外,我真的很喜歡JavaScript,你可以發佈一個生成數組並對其進行洗牌的例子嗎? –

+0

看看http://stackoverflow.com/questions/962802/is-it-correct-to-use-javascript-array-sort-method-for-shuffling/962890#962890的洗牌。我不太瞭解JavaScript以編寫代碼來創建數組。 –

+0

好的...希望我知道如何創建陣列。謝謝你的幫助,耶利米! –

0
Array.prototype.shuffle= function(force){ 
    var i, temp, L= this.length, 
    A= force? this: this.concat(); 
    while(--L){ 
     i= Math.floor(Math.random()*L); 
     temp= A[i]; 
     A[i]= A[L]; 
     A[L]= temp; 
    } 
    return A; 
} 

(可選)參數的目的是洗牌數組本身。 默認情況下,該數組不是混洗,但會返回一個混洗副本。

0

這應該工作:

// New Array 
a = []; 
// 3 rows, 3 columns 
c = 3; 
r = 3; 
// fill array with every unique possibility 
for(var i = 1; i <= r; i++) { 
    for(var j = 1; j <= c; j++) { 
    a[a.length] = "" + i + "," + j; 
    } 
} 
// random pick into another array 
result = []; 
a_len = a.length; 
for(var i = 0; i < a_len; i++) { 
    result[result.length] = a.splice(Math.floor(Math.random()*a.length), 1)[0]; 
} 

如果你只是想打印的結果,而不是在一個陣列,具有人只是做打印的,而不是「結果[結果。長度]」。

1

這裏有一種方法:

var answer = (function(width,height) { 
    var result = []; 
    for (var i = 1; i <= width; i++) { 
    for (var j = 1; j <= height; j++) { 
     result.push([i, j]); 
    } 
    } 
    return result.sort(function(a, b) { 
    return 0.5 - Math.random(); 
    }); 
}(3,3)); // enter width/height here, 1-indexed 

編輯:忘記了 「打印」 的要求:

for(var k = 0, len = answer.length; k < len; k++){ 
    console.log(answer[k]); // or your preferred definition of "print" 
}