首页 >web前端 >js教程 >如何有效地从数组中选择随机项而不重复,特别是当数组不断修改时?

如何有效地从数组中选择随机项而不重复,特别是当数组不断修改时?

Susan Sarandon
Susan Sarandon原创
2024-11-01 17:16:02572浏览

How can I efficiently select random items from an array without repetition, especially when the array is constantly being modified?

从数组中高效随机选择

简介

从数组中随机选择一个项目而不重复是一种常见的编程任务。然而,如果项目池不断被修改,确保效率就变得至关重要。

问题

开发者实现了一个从数组中随机选择项目的功能同时保留最近选择的列表以避免重复。然而,他们对其效率表示担忧,并询问是否有更优化的方法。

回答

1。递归澄清

提供的代码确实看起来是一个递归函数。递归涉及函数调用自身,这在某些场景下可能会导致效率低下。

2.效率提升

要提高效率,请考虑以下替代方法:

  1. 创建原始数组的副本。这可确保原始数组保持不变。
  2. 定义一个函数,从副本中随机选择一个项目。
  3. 当副本耗尽时,通过创建新副本来重置它原始数组。

代码实现:

<code class="javascript">function randomNoRepeats(array) {
  var copy = array.slice(0);
  return function() {
    if (copy.length < 1) {
      copy = array.slice(0);
    }
    var index = Math.floor(Math.random() * copy.length);
    var item = copy[index];
    copy.splice(index, 1);
    return item;
  };
}

var chooser = randomNoRepeats(['Foo', 'Bar', 'Gah']);</code>

说明:

这种方法将随机选择逻辑与负责管理最近选择数组的代码隔离开来。因此,效率得到了提高,因为每次运行选择器函数时,随机选择只发生一次。

通过在副本耗尽时重置副本,该函数保证所有项目都有相同的机会被选择。这消除了代码陷入无限循环试图找到“唯一”名称的潜在问题。

以上是如何有效地从数组中选择随机项而不重复,特别是当数组不断修改时?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn