首页  >  文章  >  web前端  >  如何高效地选择不重复的随机数组项?

如何高效地选择不重复的随机数组项?

Barbara Streisand
Barbara Streisand原创
2024-10-31 10:41:40155浏览

How Can We Efficiently Select Random Array Items Without Repetition?

高效随机选择数组项而不重复

在本文中,我们探讨了用户寻求有效随机选择方法时面临的问题数组中不重复的项目。提供的代码有效地选择了项目,但由于使用递归函数而引入了无限循环的可能性。

递归函数?

函数 ChooseName() 可以被视为递归,因为它在定义中引用了自身。终止条件是发现唯一项,其中unique设置为false,打破循环,重新开始函数调用。

提高效率

增强效率,我们考虑评论者@YuriyGalanter 建议的替代方法。我们可以从数组中随机选择项目并将它们存储在临时数组中,而不是依赖递归函数。选择所有项目后,我们重置临时数组并继续随机选择过程。

实现

下面的实现采用了这种方法:

<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']);
chooser(); // => "Bar"
chooser(); // => "Foo"
chooser(); // => "Gah"
chooser(); // => "Foo" -- only repeats once all items are exhausted.</code>

通过利用此功能,可以随机选择项目,而不会出现无限循环,同时避免重复问题。

以上是如何高效地选择不重复的随机数组项?的详细内容。更多信息请关注PHP中文网其他相关文章!

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