У меня есть jsfiddle.jQuery .now() не уникально
obj = {};
obj[0] = 'hej';
obj[1] = 'hopp';
$.each(obj, function(key, value) {
console.log($.now());
});
$.now()
такой же номер в консоли.
Как я могу создать уникальный номер?
У меня есть jsfiddle.jQuery .now() не уникально
obj = {};
obj[0] = 'hej';
obj[1] = 'hopp';
$.each(obj, function(key, value) {
console.log($.now());
});
$.now()
такой же номер в консоли.
Как я могу создать уникальный номер?
У вас может быть счетчик, который увеличивается для каждого объекта. Затем вы можете добавить этот счетчик $ .now(), чтобы убедиться, что он уникален:
obj = {};
obj[0] = 'hej';
obj[1] = 'hopp';
counter=1;
$.each(obj, function(key, value) {
console.log($.now() + counter);
counter+=1;
});
jQuery.now()
не должен дать вам уникальный номер, просто «число, представляющее текущее время» (http://api.jquery.com/jQuery.now/) , В частности, «количество миллисекунд с 1 января 1970 года 00:00:00 UTC» (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTime).
Самый простой способ, чтобы генерировать уникальный идентификатор зависит от сферы идентификатор должен быть уникальным в
1:. Если идентификатор просто должен быть уникальным в пределах области действия функции, счетчик как это было предложено SteveP, вероятно, сделает работу лучше всех.
2: Если идентификатор должен быть уникальным в рамках вашего приложения - и у вас нет возможности отслеживать назначенные идентификаторы (как в 1) - ваша задача сложнее. В реальных приложениях жить такой сценарий может быть решена путем объединения метки со случайным числом, вдоль линий
var identifier = $.now() + "_" + Math.round(Math.random() * 1e10)
Такой подход не гарантирует истинной уникальности identifier
хотя с Math.round(Math.random() * 1e10)
может вернуться в тот же значение дважды за одну миллисекунду. В зависимости от того, как часто вы генерируете такую строку, все равно будет маловероятно, что вы получите одну и ту же строку дважды.
3: Однако, если вы нацелены на «уникальность в пространстве и времени», вы можете получить вдохновение от http://www.ietf.org/rfc/rfc4122.txt
Следует отметить, что чистые реализации Javascript как Create GUID/UUID in JavaScript? работают только со случайными числами, а также и будет, таким образом, не генерировать действительно уникальных идентификаторов. Для действительно уникальный идентификатор в пространстве и времени действительно уникальный элемент, такой как MAC-адрес, должен использоваться как часть идентификатора.
Цитата jquery api:
в $ .now() метод является сокращением числа возвращенного выражение (новая дата) .getTime().
Таким образом, вы в основном используете new Date().getTime()
. Однако getTime() не является точным ...Interresting цитаты из this article:
Эффективно эти браузеры только обновить свою внутреннюю GetTime представления каждые 15 миллисекунд. Это означает, что если вы попробуете запросить обновленное время, он всегда будет округлен до последнего , когда таймер был обновлен (что в среднем будет около 7.5 миллисекунд назад).
Вкратце: getTime()
не так точен (в некоторых браузерах).
Когда вам нужно случайное число (как вы делаете), используйте:
var randomVal = Math.random(); // e.g. 0.6137274974025786
var randomValI = Math.round(Math.random()*100000000000000000) // e.g. 6137274974025786
Если вам нужно более формальный «справ», использовать что-то вроде this:
function createGUID() {
function S4() {
return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
}
// then to call it, plus stitch in '4' in the third group
return (S4() + S4() + "-" + S4() + "-4" + S4().substr(0,3) + "-" + S4() + "-" + S4() + S4() + S4()).toLowerCase();
}
var guid = createGUID();
Таким образом, ваш компьютер слишком быстро? – j08691
Если вам нужен действительно уникальный номер, создайте var, который содержит число и увеличит его. Не нужно быть фантазией. Вы можете даже абстрагировать это позади функции, если вам нужно, чтобы она была уникальной для всего приложения и не нуждалась в глобальном count var. –
Вы создаете объект, а затем даете ему ключи '0' и' 1'. звучит скорее как массив для меня. –