2014-10-01 32 views
-1

我是JavaScript編碼新手。我正試圖在textarea上輸入名稱列表。用戶選擇所需的組數,然後點擊隨機播放,然後將分組顯示爲輸出結果。下面是我的代碼,但它不工作,因爲它應該是,請幫助!在javascript中製作具有隨機名稱的組

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

我編輯的代碼,所以我跟我的輸入,輸出和隨機播放按鈕的html代碼是有作爲。 – 2014-10-01 10:38:25

+0

用你的代碼製作[fiddle](http://jsfiddle.net/)。給出一個示例輸入,例如「Josh,Adam,Chris ...」和示例輸出(如何將它們分組,最終結果)。 – akinuri 2014-10-01 10:45:27

+0

我的輸出應該是這樣的: '組1 - Thomas,Linda,Jonah 組2 - Andreas,Benjamin,Robin' 名稱輸入到textarea。用戶選擇他想要的數量的組,然後javascript將隨機排序並將這些名稱分組,然後結果將顯示在ID爲resInput的第二個textarea上。 – 2014-10-01 10:56:21

回答

0
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"); 

    } 

} 
+1

謝謝!很有幫助! – 2014-10-01 11:27:00

0

我改寫了你的代碼。這是不言而喻的。

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"; 
    } 
}