Я работаю над компонентом HTML с JavaScript. Этот компонент будет появляться на странице несколько раз (порядка сотен или, может быть, тысяч), и я хочу, чтобы каждый из них имел уникальный идентификатор.
Пока я создаю уникальные идентификаторы (UID), генерируя случайное число для каждого из компонентов и назначая его в качестве идентификатора. Что-то вроде этого:
var UID = "componente-" + Math.floor(Math.random() * 999999);
miComponente.id = UID;
Но у этого метода есть серьезные проблемы, потому что некоторые идентификаторы могут повторяться. По крайней мере, я должен добавить проверку, чтобы убедиться, что идентификаторы не повторяются, но помимо этого, какой другой метод существует для создания уникальных идентификаторов? Есть ли встроенная функция в JavaScript, которая делает это? (что-то вроде uniqid
PHP).
В настоящее время существует библиотека для генерации UUID, реализующая стандарт RFC4122 . Его использование очень простое, просто добавьте библиотеку и используйте методы
v1
иv4
версию, которую вы хотите сгенерировать.Это зависит от того, что вы подразумеваете под уникальностью .
Использование числовой переменной и увеличение ее значения каждый раз, когда вы ее используете, так же тривиально, как и преобразование ее в строку.
У вас уже есть несколько сотен миллионов уникальных идентификаторов. Каждый раз, когда вы выполняете
++UUID
, счетчик автоматически увеличивается.Вы можете сбросить генератор, когда захотите:
UUID = 0;
. Или используйте префикс :Или используйте его в функции:
Здесь я оставляю вам функцию, которую я использую в течение длительного времени, и она творит чудеса для меня, создавая уникальные идентификаторы.
Фрагмент книги "JavaScript The Good Parts" (стр. 41)
Другой вариант следующий:
Используйте текущую дату для создания значения идентификатора, которое всегда будет уникальным при каждом его создании .
Для этого примера я позаимствовал код из W3Schools и адаптировал его, чтобы лучше проиллюстрировать вышеизложенное:
Конечно, если речь идет о безопасности или другой функции, которую должны иметь уникальные значения, это может быть не лучший вариант в зависимости от потребности разработчика .
locutus.io
опубликовал на своем веб-сайте реализациюuniqid en JS
, эквивалентную реализацииuniqid de PHP
Естественно, нет, нельзя. Вам нужно будет создать метод, который привязывает идентификаторы к пространству имен и увеличивает их с каждым элементом.
Вместо того, чтобы изобретать велосипед, вы можете использовать метод подчеркивания _.uniqueId, который делает именно то, что вам нужно.
Если они должны быть уникальными только на стороне клиента (то есть вам не нужно что-то криптографически безопасное), вы можете поставить счетчик для генерации идентификатора точно так же, как
uniqueId
функция подчеркивания, которую прокомментировал @amendadiel, и вы сохраняете внешнюю библиотеку , поэтому, если мы проверим упомянутую функцию, мы увидим, что она довольно проста (отредактировано для удаления пространства имен Underscore ):Точно так же вы можете использовать метку времени и случайное число, если хотите что-то более длинное (хотя со счетчиком это должно работать для вас):
Если вы хотите использовать их для пользовательского интерфейса, вы можете использовать Symbol https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Symbol .
Никаких библиотек, никаких генераторов uid/string
действительно уникальный
С быстрым равным