我使用以下 JS 函数来生成唯一 ID,这是我从另一个 StackOverflow 线程获得的:
function generateUniqueID() {
return Math.round(new Date().getTime() + (Math.random() * 100));
}
我看到它将当前日期/时间与附加随机发生器结合在一起。
尽管如此,我验证了在快速添加带有 ID 的项目的每 4 次或 5 次操作中都会发生冲突。
该函数在 JS 循环内调用,以从当前元素列表生成 ID。
jQuery.each(mainEvents, function(index, item) {
// ...
// Generate gaps
gapEvents.push({"gapEventID" : "event-GAP" + generateUniqueID(),
"other" : other });
}
这个功能不靠谱吗?它可以允许快速 JS 循环迭代中发生冲突吗?
我几乎排除了“外部原因”(即这个函数不是罪魁祸首,但可能是其他原因),但如果是这样的话,我无法理解为什么Math.random()
不能保证我的安全。
非常如此。您可以使用new Date().getTime()
假设每次迭代花费的时间超过 1ms,获得唯一的 id。从你的数据中可以看出,这是错误的。与使用的 RNG 结合Math.floor
,很有可能得到重复的值。只要间隔 Math.random()10^15 是更好的选择。 10^15 是永远不会超过的最大整数数字长度Number.MAX_SAFE_INTEGER
.
Math.floor(Math.random() * Math.pow(10, 15))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)