【问题标题】:Generate random list of unique rows, columns javascript生成唯一行、列javascript的随机列表
【发布时间】:2011-07-06 06:13:19
【问题描述】:

如何在 javascript 中生成(并单独打印)唯一列、行对的列表? 我有两个变量集,列数和行数。我只希望每对出现一次,并且其中不能有 0。假设我有 3 行 3 列,我想要:

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

全部随机排列。我该怎么做?

【问题讨论】:

  • 你想要什么?网格中的所有行列对都按某种顺序写出来了吗?
  • 没错。最重要的是随机顺序。

标签: javascript random numbers


【解决方案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"
}

【讨论】:

    【解决方案2】:

    这应该可行:

    // 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];
    }
    

    如果您只想打印结果而不是将它们放在数组中,只需打印而不是“result[result.length]”。

    【讨论】:

      【解决方案3】:

      虽然不是我的算法

      <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>
      

      【讨论】:

        【解决方案4】:
        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;
        }
        

        (可选)参数的目的是对数组本身进行洗牌。 默认情况下,该数组没有被打乱,而是返回一个打乱的副本。

        【讨论】:

          【解决方案5】:

          您应该生成一个包含所有可能坐标对的数组,使用shuffling algorithm 将它们随机排列,然后打印出来。

          【讨论】:

          • 该函数的 javascript 版本在哪里?另外,我真的是 javascript 的菜鸟,你能发布一个生成数组并改组它的示例吗?
          • 查看stackoverflow.com/questions/962802/… 进行随机播放。我不太了解 JavaScript,无法编写创建数组的代码。
          • 好的...希望我知道如何创建数组。不过,感谢您的帮助,耶利米!
          猜你喜欢
          • 2013-04-22
          • 2012-12-29
          • 1970-01-01
          • 1970-01-01
          • 2013-03-13
          • 2014-11-26
          • 2018-05-03
          • 1970-01-01
          相关资源
          最近更新 更多