Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 数组中唯一的随机项_Javascript_Arrays_Random_Unique - Fatal编程技术网

Javascript 数组中唯一的随机项

Javascript 数组中唯一的随机项,javascript,arrays,random,unique,Javascript,Arrays,Random,Unique,在JavaScript中,我想从数组中随机删除一个项目,然后单击按钮在HTML中显示该项目。 然后,在下一次单击按钮时,显示从阵列中删除的下一个项目。然而,这似乎不起作用 小提琴: document.getElementById(“按钮”).onclick=function(){ var计数=3; var myArray=[ “A”, “B”, "C",, “D”, "E",, "F",, “G” ]; var tmpArrayE=myArray.slice(myArray); var goE=

在JavaScript中,我想从数组中随机删除一个项目,然后单击按钮在HTML中显示该项目。 然后,在下一次单击按钮时,显示从阵列中删除的下一个项目。然而,这似乎不起作用

小提琴:

document.getElementById(“按钮”).onclick=function(){
var计数=3;
var myArray=[
“A”,
“B”,
"C",,
“D”,
"E",,
"F",,
“G”
];
var tmpArrayE=myArray.slice(myArray);
var goE=[];
对于(变量i=0;i
您正在onclick函数中声明
myArray
。因此,每次单击都会创建一个新数组

var myArray=[
“A”,
“B”,
"C",,
“D”,
"E",,
"F",,
“G”
];
document.getElementById(“按钮”).onclick=function(){
//检查myArray长度是否大于0
如果(myArray.length>0){
//生成随机数
var optionsE=Math.floor(Math.random()*myArray.length);
//删除该元素并在div中显示
var removedE=myArray.splice(选项E,1);
document.getElementById(“Answer”).innerHTML=removedE;
}
}

开始
结果

如果要使用myArray的副本,则需要将此行移到回调之外,因为每次事件都会得到一个(新)副本

var tmpArrayE = myArray.slice(0); // myArray.slice(myArray) is wrong.

要在回调中使用原始数组,您可以只使用
myArray

在事件处理程序中重新定义数组,这样数组就永远不会为空

以下是您的更新代码:

// myArray initial content, as a global variable : 
  var myArray = [
    'A',
    'B',
    'C',
    'D',
    'E',
    'F',
    'G'
  ];

  // the event handler, randomly emptying myArray one at a time : 
  document.getElementById("Button").onclick = function() {
    // check for an empty array : 
    if (myArray.length > 0) {
      var optionsE = Math.floor(Math.random() * myArray.length);
      var removedE = myArray.splice(optionsE, 1);
      document.getElementById("Answer").innerHTML = removedE[0];
    } else {
      alert("the array is now empty");
    }
}

计划A:首先洗牌数组。然后在需要时弹出最后一个元素

方案B:从0到len-1中选择一个随机元素。将最后一个元素复制到该插槽中。然后将数组缩短1

如果您需要“随机”函数,请执行此操作(仅N步;结果为随机):


是否要从原始列表中删除该元素?或者只显示列表中的随机元素?
slice
用于获取数组的一部分作为新数组。但是你想用myArray.splice(myArray)做什么呢?可能是removedE而不是goE[0]你想让每个元素只显示一次,或者它们能重复一次吗?这太完美了,谢谢你,出于某种原因,我甚至没有想到把数组放在函数之外!将其移到函数外部修复了所有问题,谢谢!!!
// myArray initial content, as a global variable : 
  var myArray = [
    'A',
    'B',
    'C',
    'D',
    'E',
    'F',
    'G'
  ];

  // the event handler, randomly emptying myArray one at a time : 
  document.getElementById("Button").onclick = function() {
    // check for an empty array : 
    if (myArray.length > 0) {
      var optionsE = Math.floor(Math.random() * myArray.length);
      var removedE = myArray.splice(optionsE, 1);
      document.getElementById("Answer").innerHTML = removedE[0];
    } else {
      alert("the array is now empty");
    }
}
for j = 0..N-1
     swap item #j with item # rand(0..N-1)