gpt4 book ai didi

javascript - 生成随机值,保留返回值的历史记录

转载 作者:行者123 更新时间:2023-11-30 07:16:40 26 4
gpt4 key购买 nike

对于我正在从事的项目,我需要一个 Javascript 函数,该函数将在给定范围内返回一个随机数,并且在整个范围“耗尽”之前不会重复自身。由于周围没有这样的东西,所以我设法自己创建了它。

该函数还需要传递 id。这样,如果您需要多个随机数,每个随机数都有自己的历史记录,id 会跟踪所有这些随机数。

该功能有效,但我需要一些建议;

  1. 这是实现我想要实现的目标的“正确”方法吗?
  2. inArray() 对非常大的范围 (maxNum) 值的执行速度有多快?我有一种感觉,大数字会减慢函数的速度,因为它会随机化数字,直到它生成一个仍然“有效”的数字(即不在历史数组中)。但我想不出另一种方法来做到这一点..

脚本:

var UniqueRandom = {
NumHistory: [],
generate: function (maxNum, id) {
if (!this.NumHistory[id]) this.NumHistory[id] = [];
if (maxNum >= 1) {
var current = Math.round(Math.random() * (maxNum - 1)), x = 0;
if (maxNum > 1 && this.NumHistory[id].length > 0) {
if (this.NumHistory[id].length !== maxNum) {
while ($.inArray(current, this.NumHistory[id]) !== -1) {
current = Math.round(Math.random() * (maxNum - 1));
x = x + 1;
}
this.NumHistory[id].push(current);
} else {
//reset
this.NumHistory[id] = [current];
}
} else {
//first time only
this.NumHistory[id].push(current);
}
return current;
} else {
return maxNum;
}
},
clear: function (id) {
this.NumHistory[id] = [];
}
};

用法是:(100 是范围 (0-100) 和 the_id 是..好吧,id)

UniqueRandom.NumHistory[100, 'the_id']

我已经设置了一个 Fiddle带有演示。

最佳答案

  1. 这不是最佳做法。 Imo 最好根据需要生成的一系列数字实例化一个对象。
  2. 我建议生成一个包含所有可能值的数组并将其洗牌。然后你就可以弹出它了。

关于javascript - 生成随机值,保留返回值的历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13817384/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com