数组中的唯一随机项

时间:2017-09-04 16:34:55

标签: javascript arrays random unique

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

小提琴:http://jsfiddle.net/bs4e5g69/

document.getElementById("Button").onclick = function() {
  var count = 3;
  var myArray = [
    'A',
    'B',
    'C',
    'D',
    'E',
    'F',
    'G'
  ];
  var tmpArrayE = myArray.slice(myArray);
  var goE = [];

  for (var i = 0; i < count; i++) {
    var optionsE = Math.floor(Math.random() * tmpArrayE.length);
    var removedE = tmpArrayE.splice(optionsE, 1);

    goE.push(removedE[0]);
  }
  document.getElementById("Answer").innerHTML = goE[0];
}

4 个答案:

答案 0 :(得分:1)

您正在事件处理程序中重新定义数组,因此您的数组永远不会为空!

这是您更新的代码:

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

Updated JSFiddle

答案 1 :(得分:0)

您在onclick函数中声明myArray。因此,每次点击它都会创建一个新数组。

var myArray = [
  'A',
  'B',
  'C',
  'D',
  'E',
  'F',
  'G'
];
document.getElementById("Button").onclick = function() {
  //check if myArray length is greater than 0
  if (myArray.length > 0) {
    // generate random number
    var optionsE = Math.floor(Math.random() * myArray.length);
    // remove that element & show in div
    var removedE = myArray.splice(optionsE, 1);
    document.getElementById("Answer").innerHTML = removedE;
  }

}
<button id="Button">
  Start
</button>
<div id="Answer">
  Result
</div>

答案 2 :(得分:0)

如果您想使用myArray的副本,则需要在回调之外移动此行,因为您始终会获得每个事件的(新)副本。

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

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

答案 3 :(得分:0)

计划A:通过改组阵列开始。然后在需要时将最后一个元素弹出。

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

如果您需要“随机播放”功能,请执行此操作(仅N步;结果是随机的):

index