【问题标题】:making groups with random names in it in javascript在 javascript 中创建具有随机名称的组
【发布时间】:2014-11-26 03:54:02
【问题描述】:

我是 Javascript 编码的新手。我正在尝试对在 textarea 上输入的名称列表进行洗牌。用户选择所需的组数,并在单击时随机播放,然后将划分的组显示为输出结果。以下是我的代码,但它不能正常工作,请帮助!

<script>

    function ArrayToGroups(source, groups){
        var groupList = [];

        groupSize = Math.ceil(source.length/groups);

        var queue = source;

        for(var r = 0; r < groups; r++){
            groupList.push(queue.splice(0,groupSize));
        }
        return groupList;
    }

    function textSpliter(splitText){

        var textInput = document.getElementById("inputText").value;
        var splitText = textInput.split(',');

        var newList = []; 

        for(x = 0; x <= splitText.length; x++) {
            var random = Math.floor(Math.random() * splitText.length);

            var p = splitText[random];
            newList.push(p);

            splitText.splice(p,groupList);
        }

        for(var i = 0; i < newList.length; i++){

            var s = newList[i];
            document.getElementById('resInput').value += s + "\n" ;
        }

        return splitText;
    }



</script>

Below is my input and output textareas

</head>
<body>
<form>
    <textarea id="inputText" placeholder="text" rows="10" cols="40"></textarea>
    <input type="number" name="number" max="6" value="1" id="groupNumber">
    <textarea id="resInput" placeholder="text" rows="10" cols="40"></textarea>
    <input type="button" name="Shuffle" value="shuffle" onclick="textSpliter()">
</form>
</body>
</html>

【问题讨论】:

  • 我编辑了代码,所以我的 html 代码与我的输入、输出和随机播放按钮也在那里。
  • 用你的代码创建一个fiddle。给出一个示例输入,例如“Josh,Adam,Chris...”和示例输出(您希望如何对它们进行分组,最终结果)。
  • 我的输出应该如下所示: 'group 1 - Thomas,Linda,Jonah group 2 - Andreas,Benjamin,Robin' 名称输入到文本区域。用户选择他想要的组数,然后 javascript 会将名称打乱并排序到组中,然后结果将显示在 ID 为 resInput 的第二个 textarea 上。

标签: javascript arrays list shuffle


【解决方案1】:

ES6 版本 ;-)

http://jsfiddle.net/dLgpny5z/1/

function textSpliter() {
  var input = document.getElementById("inputText").value;
  var names = input.replace(/\s*,\s*|\n/g, ",").split(",");

  var groupSize = document.getElementById("groupNumber").value;
  var groupCount = Math.ceil(names.length / groupSize);
  var groups = [...Array(groupCount)].map(() => Array());

  var i = 0
  while (names.length > 0) {
    var m = Math.floor(Math.random() * names.length);
    groups[i].push(names[m]);
    names.splice(m, 1);
    i = (i >= groupCount - 1) ? 0 : i + 1
  }
  printGroups(groups);
}

function printGroups(groups) {
  var output = document.getElementById("resInput");
  output.value = groups.map(group => group.join(',')).join('\r');
}

【讨论】:

    【解决方案2】:

    我重写了你的代码。这是不言自明的。

    FIDDLE

    function textSpliter() {
        var input = document.getElementById("inputText").value;
        var names = input.split(",");
    
        var groupSize = document.getElementById("groupNumber").value;
        var groupCount = Math.ceil(names.length / groupSize);
        var groups = [];
    
        for (var i = 0; i < groupCount; i++) {
            var group = [];
            for (var j = 0; j < groupSize; j++) {
                var random = Math.floor(Math.random() * names.length);
                var name = names[random];
                if (name != undefined) {
                    group.push(name);
                    names.splice(names.indexOf(name), 1);
                }
            }
            group.sort();
            groups.push(group);
        }
        printGroups(groups);
    }
    
    function printGroups(group) {
        var output = document.getElementById("resInput");
        output.value = "";
        for (var i = 0; i < group.length; i++) {
            var currentGroup = "";
            for (var j = 0; j < group[i].length; j++) {
                currentGroup = group[i].join(",");
            }
            output.value += currentGroup + "\r";
        }
    }
    

    【讨论】:

      【解决方案3】:
      function shuffle() {
      
          // Get list
          // Example: element1, element 2, ele ment 3, ...
          var list = document.getElementById("inputText").value.replace(/\s*,\s*/g, ",").split(",");
      
          // Get number of groups
          var n = parseInt(document.getElementById("groupNumber").value);
      
          // Calculate number of elements per group
          var m = Math.floor(list.length / n);
      
          // Enought elements
          if (n * m == list.length) {
      
              // Create groups
              var groups = new Array();
      
              for (i = 0; i < n; i++) {
      
                  groups[i] = new Array();
      
                  for (j = 0; j < m; j++) {
      
                      // Random
                      rand = Math.floor(Math.random() * list.length);
      
                      // Add element to group
                      groups[i][j] = list[rand];
      
                      // Remove element to list
                      list.splice(rand, 1);
                  }
      
              }
      
              // Output
              var text = "";
      
              for (i = 0; i < n; i++) {
      
                  text += "Group " + (i + 1) + ": ";
      
                  for (j = 0; j < m; j++) {
      
                      if (j != 0) { text += ", "; }
                      text += groups[i][j];
      
                  }
      
                  text += "\n";
      
              }
      
              document.getElementById("resInput").value = text;
      
          } else {
      
              alert("Add more elements");
      
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 2013-11-10
        • 2011-08-15
        • 1970-01-01
        • 2011-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-31
        相关资源
        最近更新 更多