我正在使用 JavaScript 开发一个 HTML 组件。这个组件将在页面上出现多次(大约数百或数千),我希望它们中的每一个都有一个唯一的标识符。
到目前为止,我正在通过为每个组件生成一个随机数并将其分配为 ID 来创建唯一 ID (UID)。像这样的东西:
var UID = "componente-" + Math.floor(Math.random() * 999999);
miComponente.id = UID;
但是这种方法有很大的问题,因为某些 ID 可能会重复。至少我应该添加一个检查以确保 ID 不重复,但除此之外还有什么其他方法可以生成唯一标识符?JavaScript中是否有一个本机函数可以做到这一点?(类似于uniqid
PHP)。
当前有一个库可以生成实现RFC4122标准的 UUID 。它的使用非常简单,只需添加库并根据您要生成的版本使用方法
v1
和版本即可。v4
这取决于您所说的unique。
使用数字变量并在每次使用时递增其值是微不足道的,就像将其转换为字符串一样。
您已经拥有数亿个唯一标识符。每次执行
++UUID
时,计数器都会自动增加。您可以随时重置生成器:
UUID = 0;
. 或使用前缀:或者在函数中使用它:
在这里,我给你留下一个我已经使用了很长时间的函数,它对我生成唯一的 id 有很大的作用。
图书片段“JavaScript The Good Parts”(第 41 页)
另一种选择如下:
使用当前日期构建一个 id 值,该值在每次生成时始终是唯一的。
对于这个示例,我从 W3Schools 借用了代码并对其进行了修改以更好地说明上述观点:
当然,如果是关于安全性或者唯一值必须具备的其他功能,这可能不是最佳选择,具体取决于开发者的需要。
locutus.io
已在其网站上发布了uniqid en JS
与uniqid de PHP
自然,不,你不能。您必须构建一个将 ID 绑定到命名空间并随每个元素递增的方法。
您可以使用下划线的 _.uniqueId 方法,而不是重新发明轮子,这正是您需要的。
如果它们必须仅在客户端是唯一的(也就是说,您不需要加密安全的东西),您可以放置一个计数器来生成 id,就像
uniqueId
@amendadiel 评论的下划线函数一样,然后保存一个外部库,所以如果我们检查上面提到的函数,我们会看到非常简单(编辑删除下划线命名空间):以同样的方式,如果您想要更长的时间,您可以使用时间戳和随机数(尽管使用计数器它应该适合您):
如果您希望它们用于 UI,您可以使用 Symbol https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Symbol
没有库,没有 uids/字符串生成器
真的很独特
快速等于