从Javascript数组中生成随机元素组

5

你好,我正在为学校的项目工作,尝试从名字列表中生成随机分组的名字。分组大小和分组数量将基于用户的输入。我已经有了从数组中随机生成单个元素的代码,但我需要一些帮助进行分组。

这是我的代码,它还没有生效,请帮忙,谢谢!

function yeah()
        {
        var arr = prompt("Enter your names").split(",")
        console.log(arr);
        var random = arr[Math.floor(Math.random() * arr.length)];
         document.getElementById("h2").innerHTML = random;
        }
       

 function groups()
       {  
            var arr = prompt("Enter your names").split(",");
            var random = arr[Math.floor(Math.random() * arr.length)];
            var numElem = document.getElementById("input2").value;
            for (i=0;i <= arr.length; i++)
            {   
                
                  
                var newArr = [random];
                console.log(newArr);
               //print name to a new list
                //remove name from old list
                /* var arr = prompt("Enter your names").split(",")
                var groupNum = document.getElementById("input1").value;
                var newArrays =  arr.length / groupNum; */
                
        
            }
            
        
       } 
  /* Reset */
  * {
   margin: 0;
   padding: 0;
  }

  html,body {
    height:100%;
    margin:0;
    font-family: 'Montserrat', 'sans-serif';
    color:#424242;
    overflow: hidden;
  }
  .display {
    text-align: center;
    display: table;
    height:100%;
    margin:0 auto;
  }
  .wrap {
    display: table-cell;
    vertical-align: middle;
  }
  p {
    font-size: 50px; /* For lamers who don't support viewport sizing */
    font-size:20vmin;
    text-align: center;
    margin: 0;
  }
#h2 {
    float: center;
    font-size: 30vmin;

    background-size: contain;

}
  input.text-display {
    display: inline-block;
    color: #5E5E5E;
    font: bold 20px arial;
    text-decoration: none;
    text-align: center;
    margin: 20px auto;
    padding: 15px 20px;
    background: #EFF0F2;
    border-radius: 4px;
    border-top: 1px solid #F5F5F5;
    box-shadow: inset 0 0 25px #E8E8E8, 0 1px 0 #C3C3C3, 0 2px 0 #C9C9C9, 0 2px 3px #333;
    text-shadow: 0px 1px 0px #F5F5F5;
  }

  span.love {
    display: block;
    position: absolute;
    bottom:10px;
    width: 100%;
    text-align: center;
  }
  span.love a {
    text-decoration: none;
    color:#D12026;
  }
  .twitter-follow-button {
    vertical-align: text-bottom;
  }
  .twitter-share-button {
    vertical-align: text-bottom;
  }
<div class="display">
            <div class="wrap">
                <p>Your random value is:</p>
                <div id="h2">Null</div>
                
                <input  class="text-display" type="button" onclick="yeah()" height="50px" width="50px" value="click to input data">
               <!-- <input type="button" onclick="display()" value="display random"> -->
                <br>
                <input id="input1" value="Enter number of Groups">
                <input id="input2" value="Enter number of elements per Group">
                <input type="button" onclick="groups()">
            </div>
            
        </div>

3个回答

1
这里有一个首要的修复方法:要向数组中添加新元素(就像你在for循环中做的那样),你应该使用arr.push()方法。在此之前,你也需要将newArr声明为空数组。
但是,我不确定你在groups函数中是否正在执行你想要的操作。现在看起来好像你正在从列表中选择一个随机名称,然后,对于列表中的每个名称,都将这一个随机名称分配给你的新数组。
可能有帮助的是,只需编写一个步骤列表(我们称之为伪代码),然后将该列表转换为JavaScript代码。在该列表中查找不一致性要容易得多,而不是在有时令人困惑的代码中筛选。
希望这可以帮到你,如果你有更多问题,请告诉我!

嗨,感谢你的帮助!!!我现在遇到了一些麻烦,无法找到实施我想做的事情的最佳方式(基本上就是在思考和运行代码来看看是否有效)。如果你能对我如何实际实现我想要做的事情提供一些指导,那将非常棒!谢谢。 - Neil Mockler
另一件经常帮助我的事情是逐步地在项目上工作。我会让一个小东西工作(硬编码值进行操作),然后我会往回追溯,以合并更多的功能或使用动态输入进行操作。 - whiterabbit25
如果我理解正确的话,这个核心功能是获取一个名字列表,并随机获取一定数量的元素,对吗? - whiterabbit25
该项目的功能是接收用户输入的姓名列表,并从中随机创建分组。用户可以通过指定分组数量和每个分组中姓名数量来设置参数。 - Neil Mockler
好的,那么我首先要做的是编写没有“输入”部分的代码。明确地编写一个包含十个左右名称的数组,并查看是否可以让JavaScript创建其中四个名称的随机列表。从那里开始,将很容易用用户输入的值替换新数组中的名称数量、名称列表等。一步一步来。 - whiterabbit25

0

不确定你的函数组在做什么。我看到它将arr中的所有数据按随机顺序放入newarr中。你应该查看使用.push()方法创建新数组的方式。这应该可以让你的代码正常工作。

示例代码:

var newarr = ["David", "Mic"];
newarr.push("Adeline");

结果:你的 newarr 数组中将包含所有三个名称。


0

这是我对你问题的理解。希望能有所帮助。

    <script>
    var arr = new Array();   
    function yeah()
    {
    arr = prompt("Enter your names").split(",")
    console.log(arr);
    //var random = arr[Math.floor(Math.random() * arr.length)];
    var allStudents ="";

    for(var i=0; i<arr.length; i++) {
        allStudents += arr[i] + "<br/>\n";
    }

     document.getElementById("h2").innerHTML = allStudents;
    }


    function groups()
    {  
        var arr = prompt("Enter your names").split(",");

        var groups = document.getElementById("groups").value;
        var perGrp = document.getElementById("per_grp").value;

        var innerText = "<h4>All</h4> ";
        for(var i=0; i<arr.length; i++) {
            innerText += arr[i] + ",";
        }
        innerText += "<br/>\n";            


        arr = shuffleArray(arr);

        var finalGroups = new Array();

        for(var i=0; i<groups; i++) {
            // assign shuffled elements
            var grpArr = "";
            for(j=0; j<perGrp; j++) {
                grpArr += arr[0] + ",";
                arr.shift(); // removes first element from array    
            }

            grpArr = grpArr.substring(0,grpArr.length - 1);
            finalGroups[i] = grpArr;
        }




        innerText += "<h4>Groups</h4><br/>\n";
        innerText += "<table width='100%' border='1'><tr>\n";           
        for(var i=0; i<groups; i++) {
            // print groups
            var j=i+1;
            var grpArr = finalGroups[i].split(",");
            innerText += "<td>Group " +j+"<br>";
            for(var k=0; k < grpArr.length; k++){
              innerText += grpArr[k] + "<br>";
            }

            innerText += "</td>\n";
        }
        innerText += "</tr></table>\n";

        document.getElementById("FinalGroups").innerHTML = innerText;


   } 

   /**
    * Randomize array element order in-place.
    * Using Durstenfeld shuffle algorithm.
    */
   function shuffleArray(array) {
       for (var i = array.length - 1; i > 0; i--) {
           var j = Math.floor(Math.random() * (i + 1));
           var temp = array[i];
           array[i] = array[j];
           array[j] = temp;
       }
       return array;
   }


</script>
    <style>
    /* Reset */
      * {
            margin: 0;
            padding: 0;
      }

      html,body {
        height:100%;
        margin:0;
        font-family: 'Montserrat', 'sans-serif';
        color:#424242;
        overflow: hidden;
      }
      .display {
        text-align: center;
        display: table;
        height:100%;
        margin:0 auto;
      }
      .wrap {
        display: table-cell;
        vertical-align: middle;
      }
      p {
        font-size: 30px; /* For lamers who don't support viewport sizing */
        font-size:10vmin;
        text-align: center;
        margin: 0;
      }
    #h2 {
        float: center;
        font-size: 10vmin;

        background-size: contain;

    }
      input.text-display {
        display: inline-block;
        color: #5E5E5E;
        font: bold 20px arial;
        text-decoration: none;
        text-align: center;
        margin: 20px auto;
        padding: 15px 20px;
        background: #EFF0F2;
        border-radius: 4px;
        border-top: 1px solid #F5F5F5;
        box-shadow: inset 0 0 25px #E8E8E8, 0 1px 0 #C3C3C3, 0 2px 0 #C9C9C9, 0 2px 3px #333;
        text-shadow: 0px 1px 0px #F5F5F5;
      }

      span.love {
        display: block;
        position: absolute;
        bottom:10px;
        width: 100%;
        text-align: center;
      }
      span.love a {
        text-decoration: none;
        color:#D12026;
      }
      .twitter-follow-button {
        vertical-align: text-bottom;
      }
      .twitter-share-button {
        vertical-align: text-bottom;
      }


    </style>

    <div class="display">
        <div class="wrap">
            <p>Create Random Groups</p>
            <!--<div id="h2"> </div>

            <input  class="text-display" type="button" onclick="yeah()"  value="click to input data"> -->
           <!-- <input type="button" onclick="display()" value="display random"> -->
            <br>
            <input id="groups" placeholder="Enter number of Groups" >
            <input id="per_grp" placeholder="Enter number of elements per Group">
            <br/>
            <input type="button" value="Create Groups" onclick="groups()">
            <div id="FinalGroups"></div>
        </div>



    </div>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接