使用Javascript从数组中随机选择唯一项
我知道有很多类似的问题,我已经讨论了其中的大部分。最接近我试图实现的代码是。 我在每列中都有一个人员列表(代表一天)。为了回答这个问题,我们假设每列有8个人。我需要随机选择5个唯一的人名。我使用了splice()从数组中删除所选项目,以确保它不会被选中两次。我对编码还不熟悉,我想我犯了一些基本的错误,因为拼接工作在第一个循环中,然后阵列返回到原始循环。你能帮我找出我的错误吗使用Javascript从数组中随机选择唯一项,javascript,random,Javascript,Random,我知道有很多类似的问题,我已经讨论了其中的大部分。最接近我试图实现的代码是。 我在每列中都有一个人员列表(代表一天)。为了回答这个问题,我们假设每列有8个人。我需要随机选择5个唯一的人名。我使用了splice()从数组中删除所选项目,以确保它不会被选中两次。我对编码还不熟悉,我想我犯了一些基本的错误,因为拼接工作在第一个循环中,然后阵列返回到原始循环。你能帮我找出我的错误吗 for (var x = 0; x < 5; x++) { var sourceArray = ss.getRang
for (var x = 0; x < 5; x++) {
var sourceArray = ss.getRange(49,j+5,8,1).getValues();
var gg = Math.floor(Math.random()*sourceArray.length);
var pickedHLA = sourceArray[gg];
sourceArray.splice(gg, 1);
var HLAselect = ss.getRange(30+x,j+5,1,1)
HLAselect.setValue(pickedHLA);
for(变量x=0;x<5;x++){
var sourceArray=ss.getRange(49,j+5,8,1).getValues();
var gg=Math.floor(Math.random()*sourceArray.length);
var pickedHLA=sourceArray[gg];
源阵列拼接(gg,1);
变量HLAselect=ss.getRange(30+x,j+5,1,1)
HLAselect.setValue(pickedHLA);
在您的for
循环中,您在每次迭代过程中都要重新定义sourceArray
——您需要在循环之外定义它,然后进行随机选择并从数组中删除:
var sourceArray = ss.getRange(49,j+5,8,1).getValues(); //establish full list of people
for (var x = 0; x < 5; x++) {
var gg = Math.floor(Math.random()*sourceArray.length); //get random index
var pickedHLA = sourceArray[gg]; //get random person via random index
sourceArray.splice(gg, 1); //remove random person from full list of people
var HLAselect = ss.getRange(30+x,j+5,1,1)
HLAselect.setValue(pickedHLA);
}
var sourceArray=ss.getRange(49,j+5,8,1).getValues();//建立完整的人员列表
对于(变量x=0;x<5;x++){
var gg=Math.floor(Math.random()*sourceArray.length);//获取随机索引
var pickedHLA=sourceArray[gg];//通过随机索引获取随机人
splice(gg,1);//从完整的人员列表中删除随机人员
变量HLAselect=ss.getRange(30+x,j+5,1,1)
HLAselect.setValue(pickedHLA);
}
这样做其实很简单,只需要几行代码:
var arr=[“奶酪”、“紫色”、“列表”、“1”、“2”、“3”、“4”、“5”];
函数随机(){
var randomNumber1=parseInt(Math.random()*arr.length);
var random=arr[randomNumber1];
警报(随机);
}
如果随机
返回1