2011-03-01 26 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" 
}