如何创建随机数的多个阵列为JavaScript数据随机化?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何创建随机数的多个阵列为JavaScript数据随机化?相关的知识,希望对你有一定的参考价值。

我建立在javascript数据随机化的历史课,我教。我希望用户进入的学生,周数,以及每个学生assignmnets数量的发票号,并通过点击一个按钮提交该数据。例如40名学生,12周,5个分配为每一位学生。因此,我希望程序生成的40行,每行含有5个随机唯一号码从1到12我设法使程序生成随机数的一列(功能weeksAssigned)的表,但随后就挂住。我怎样重复功能weeksAssigned生产其他行?我试图用二维数组,但我不知道如何随机二维数组中的每一行。我将是您的建议,非常感谢!我想我应该以某种方式利用或者一个for循环或二维数组,但我不知道怎么样。

function getRandomWeek() 
    var x,y;
    x = document.getElementById("form1").elements["duration"].value; 
    y = Math.floor(Math.random() * x + 1);
    return y;
 

function weeksAssigned() 
    var ints = [];
    var assignments = document.getElementById("form1").elements["assignments"].value; 
    while (ints.length < assignments)                                                     
        var randomWeak = getRandomWeek();
        if (ints.indexOf(randomWeak)===-1)    
          ints.push(randomWeak);
        
     
    ints.sort(function(a, b)return a-b);
    return ints;

答案

这里是你如何通过遍历每个学生,然后在每个分配新建分配FY做到这一点。

我首先创建填有因为有学生和尽可能多的列有分配尽可能多的行0一个二维数组:

const assignArr = Array.from( length: assignments , (_, i) => 0);
const studentsArr = Array.from( length: students , (_, i) => [...assignArr]);

然后,使用两个循环来填补这个数组随机星期。对于每一个学生,你在循环的开始初始化可用周,你通过这个数组getRandomWeeks()从阵列中删除随机星期,所以你不要重复他们为每个学生:

for (let student = 0; student < students; ++student) 
    const weeks = Array.from( length: duration , (_, i) => i);
    for (let work = 0; work < assignments; ++work) 
        studentsArr[student][work] = getRandomWeek(weeks) + 1;
    
    studentsArr[student].sort((a, b) => a - b);


function getRandomWeek(weeks) 
  const weekIdx = Math.floor(Math.random() * weeks.length);
  return weeks.splice(weekIdx, 1).shift();

然后,你只需要调用一个辅助函数生成表。下面是一个完整的演示。您可以编辑表单域,看看表更新:

function update() 
  const form = document.getElementById('form');
  const duration = form.elements['weeks'].value;
  const students = form.elements['students'].value;
  const assignments = form.elements['assignments'].value;
  
  const assignArr = Array.from( length: assignments , (_, i) => 0);
  const studentsArr = Array.from( length: students , (_, i) => [...assignArr]);
  
  for (let student = 0; student < students; ++student) 
    const weeks = Array.from( length: duration , (_, i) => i);
    for (let work = 0; work < assignments; ++work) 
      studentsArr[student][work] = getRandomWeek(weeks) + 1;
    
    studentsArr[student].sort((a, b) => a - b);
  
  makeTable(studentsArr);


function getRandomWeek(weeks) 
  const weekIdx = Math.floor(Math.random() * weeks.length);
  return weeks.splice(weekIdx, 1).shift();


function makeTable(data) 
  const header = document.querySelector('#table thead tr');
  header.innerhtml = '';
  for (let i = 0; i < data[0].length + 1; ++i) 
    const colEl = document.createElement('th');
    colEl.textContent = i === 0 ? 'Assignments' : `#$i`;
    header.appendChild(colEl);
  
  const tbody = document.querySelector('#table tbody');
  tbody.innerHTML = '';
  data.forEach((row, i) => 
    const rowEl = document.createElement('tr');
    const col0 = document.createElement('td');
    col0.textContent = `Student #$i + 1`;
    rowEl.appendChild(col0);
    for (let col of row) 
      const colEl = document.createElement('td');
      colEl.textContent = col;
      rowEl.appendChild(colEl);
    
    tbody.appendChild(rowEl);
  );


update();
table 
  margin: 10px;
  border-collapse: collapse;
  text-align: center;


td, th 
  border: 1px solid black;
  padding: 3px;
<form id="form">
  Weeks <input type="number" name="weeks" value=12 onchange="update()">
  Students <input type="number" name="students" value=10 onchange="update()">
  Assignments <input type="number" name="assignments" value=5 onchange="update()">
</form>

<table id="table">
  <thead>
    <tr>
    </tr>
  </thead>
  <tbody>
  </tbody>
</table>
另一答案

所有你需要做的是循环weeksAssigned和二维数组推值。

为了帮你,请检查下面的代码:

var students = document.getElementById("form1").elements["students"].value;
var studentsAssignList = [];
for(var i = 0; i < students; i++)
    var assignList = weeksAssigned();
    studentsAssignList.push(assignList);

// `studentsAssignList` will be your 2d array of all the assignments for all the students

希望这可以帮助 :)

以上是关于如何创建随机数的多个阵列为JavaScript数据随机化?的主要内容,如果未能解决你的问题,请参考以下文章

javascript 随机播放阵列内容

javascript 随机阵列

Javascript 显示来自本地存储阵列的数据问题

如何创建每个对象的财产的阵列? [重复]

Unity - 从阵列中获取随机天空盒

在控制台窗口中输出颜色方阵