javascript - 如何在 JavaScript 中从数组中随机选择之前未选择的元素?

标签 javascript

我想运行一个函数,每次从数组中随机选择一个以前未选择的元素。如果选择了所有元素,我想重置使用的元素并从头开始。

希望这是有道理的。

我已经有一个从数组中选择随机元素的函数。但我也不希望它选择之前选择的元素,除非所有元素都已选择。

这是我到目前为止所得到的(归功于@Kelly):

var item = items[Math.floor(Math.random() * items.length)]

最佳答案

你可以尝试这样的事情:

想法

  • 创建一个实用函数,它接受一个数组并返回一个随机值。
  • 在此数组内,维护 2 个数组、选项和数据。
  • 在每次迭代中,从 data 中删除 1 项并将其放入 chosenItems
  • 长度一旦为data达到0 ,设置chosenItemsoriginalArray作为数据并重复过程。

这种方法的好处是,

  • 您不需要维护和传递数组变量。
  • 它可以通用并多次使用。

function randomize(arr) {
  let data = [...arr];
  let chosenItems = [];

  function getRandomValue() {
    if (data.length === 0) {
      data = chosenItems;
      chosenItems = [];
    }
    const index = Math.floor(Math.random() * data.length);
    const choice = data.splice(index, 1)[0];

    chosenItems.push(choice);
    return choice;
  }
  
  return {
    randomItem: getRandomValue
  }
}

const dummyData = [ 1,2,3,4,5 ];

const randomizeData = randomize(dummyData);

for (let i = 0; i< 10; i++) {
  console.log(randomizeData.randomItem())
}

关于javascript - 如何在 JavaScript 中从数组中随机选择之前未选择的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60812026/

相关文章:

javascript - 单击选项中的选项时,如何更改音频源?

javascript - 理解 New 与 JavaScript 作用域函数并传递 $

javascript - document.write动态加载脚本

javascript - 在 jinja2 模板中使用 bootstrap/javascript 更改变量值颜色

javascript - Chrome 调试器显示未定义但确实有一个值

javascript - 如何扫描 javascript 代码以查找错误(有任何程序可以做到这一点)吗?

javascript - 不使用 ajax 发布 JSON 值

javascript - 如何监视 jQuery AJAX 请求?

用于对象函数扩展的 javascript .prototype

javascript - 将 Node.js 参数传递给 mongodb 请求