una tipos que pasar parametros funciones funciona funcion ejemplos desde como anidadas javascript time numbers unique

tipos - que es javascript



Crea un número único con tiempo de JavaScript (16)

Necesito generar números de identificación únicos sobre la marcha usando javascript. En el pasado, he hecho esto creando un número usando el tiempo. El número estaría compuesto por el año de cuatro dígitos, el mes de dos dígitos, el día de dos dígitos, la hora de dos dígitos, el minuto de dos dígitos, el segundo de dos dígitos y el milisegundo de tres dígitos. Entonces se vería algo como esto: 20111104103912732 ... esto daría suficiente certeza de un número único para mis propósitos.

Ha pasado un tiempo desde que hice esto y ya no tengo el código. ¿Alguien tiene el código para hacer esto o tiene una mejor sugerencia para generar una ID única?


Asumió que la solución propuesta por es una buena solución porque utiliza (new Date()).getTime() para que tenga una ventana de milisegundos y sumar un tick en caso de colisiones en este intervalo, podríamos considerar el uso de construcciones en lo que podemos ver claramente aquí en acción:

Puño, podemos ver aquí cómo puede haber colisiones en el marco de la ventana 1/1000 usando (new Date()).getTime() :

console.log( (new Date()).getTime() ); console.log( (new Date()).getTime() ) VM1155:1 1469615396590 VM1155:1 1469615396591 console.log( (new Date()).getTime() ); console.log( (new Date()).getTime() ) VM1156:1 1469615398845 VM1156:1 1469615398846 console.log( (new Date()).getTime() ); console.log( (new Date()).getTime() ) VM1158:1 1469615403045 VM1158:1 1469615403045

Segundo, probamos la solución propuesta que evita colisiones en la ventana 1/1000:

console.log( window.mwUnique.getUniqueID() ); console.log( window.mwUnique.getUniqueID() ); VM1159:1 14696154132130 VM1159:1 14696154132131

Dicho esto, podríamos considerar el uso de funciones como el nodo process.nextTick que se llama en el ciclo de evento como un solo tick y que está bien explicado here . Por supuesto, en el navegador no hay process.nextTick así que tenemos que averiguar cómo hacerlo. This implementación instalará una función nextTick en el navegador utilizando las funciones más cercanas a la E / S en el navegador que son setTimeout(fnc,0) , setImmediate(fnc) , window.requestAnimationFrame . Como se sugiere here , podríamos agregar window.postMessage , pero dejo esto al lector ya que también necesita addEventListener . He modificado las versiones originales del módulo para que sea más simple aquí:

getUniqueID = (c => { if(typeof(nextTick)==''undefined'') nextTick = (function(window, prefixes, i, p, fnc) { while (!fnc && i < prefixes.length) { fnc = window[prefixes[i++] + ''equestAnimationFrame'']; } return (fnc && fnc.bind(window)) || window.setImmediate || function(fnc) {window.setTimeout(fnc, 0);}; })(window, ''r webkitR mozR msR oR''.split('' ''), 0); nextTick(() => { return c( (new Date()).getTime() ) }) })

Entonces tenemos en la ventana 1/1000:

getUniqueID(function(c) { console.log(c); });getUniqueID(function(c) { console.log(c); }); undefined VM1160:1 1469615416965 VM1160:1 1469615416966


De la investigación en línea, se me ocurrió el siguiente objeto que crea una identificación única por sesión:

window.mwUnique ={ prevTimeId : 0, prevUniqueId : 0, getUniqueID : function(){ try { var d=new Date(); var newUniqueId = d.getTime(); if (newUniqueId == mwUnique.prevTimeId) mwUnique.prevUniqueId = mwUnique.prevUniqueId + 1; else { mwUnique.prevTimeId = newUniqueId; mwUnique.prevUniqueId = 0; } newUniqueId = newUniqueId + '''' + mwUnique.prevUniqueId; return newUniqueId; } catch(e) { mwTool.logError(''mwUnique.getUniqueID error:'' + e.message + ''.''); } } }

Puede ser útil para algunas personas.

Aclamaciones

Andrés


En ES6:

const ID_LENGTH = 36 const START_LETTERS_ASCII = 97 // Use 64 for uppercase const ALPHABET_LENGTH = 26 const uniqueID = () => [...new Array(ID_LENGTH)] .map(() => String.fromCharCode(START_LETTERS_ASCII + Math.random() * ALPHABET_LENGTH)) .join('''')

Ejemplo:

> uniqueID() > "bxppcnanpuxzpyewttifptbklkurvvetigra"


Esto crea un lado del cliente clave de 32 caracteres casi garantizado, si solo quiere que los números cambien la varilla de "caracteres".

var d = new Date().valueOf(); var n = d.toString(); var result = ''''; var length = 32; var p = 0; var chars = ''0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ''; for (var i = length; i > 0; --i){ result += ((i & 1) && n.charAt(p) ? ''<b>'' + n.charAt(p) + ''</b>'' : chars[Math.floor(Math.random() * chars.length)]); if(i & 1) p++; };

https://jsfiddle.net/j0evrdf1/1/


Esto debería hacer:

var uniqueNumber = new Date().getTime(); // milliseconds since 1st Jan. 1970


Esto es lo que hago cuando quiero algo más pequeño que un grupo de números: cambiar de base.

var uid = (new Date().getTime()).toString(36)


Esto funciona más rápido que crear una instancia de Date , usa menos código y siempre producirá un número único (localmente):

function uniqueNumber() { var date = Date.now(); // If created at same millisecond as previous if (date <= uniqueNumber.previous) { date = ++uniqueNumber.previous; } else { uniqueNumber.previous = date; } return date; } uniqueNumber.previous = 0;

jsfiddle: http://jsfiddle.net/j8aLocan/

Lo publiqué en Bower y npm: https://github.com/stevenvachon/unique-number

También puede usar algo más elaborado como cuid , puid o shortid para generar un no número.


Esto se puede lograr simplemente con el siguiente código:

var date = new Date(); var components = [ date.getYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds() ]; var id = components.join("");


Esto también debería hacer:

(function() { var uniquePrevious = 0; uniqueId = function() { return uniquePrevious++; }; }());


La forma más corta de crear un número del que puede estar seguro será único en tantas instancias separadas como se pueda imaginar.

Date.now() + Math.random()

Si hay una diferencia de 1 milisegundo en la llamada a la función, se garantiza al 100% la generación de un número diferente . Para las llamadas a funciones dentro del mismo milisegundo, solo debería preocuparse si está creando más de unos pocos millones de números dentro de ese mismo milisegundo, lo que no es muy probable.

Para obtener más información sobre la probabilidad de obtener un número repetido dentro del mismo milisegundo, consulte https://.com/a/28220928/4617597


Publicando este fragmento de código aquí para mi futura referencia (no garantizado pero satisfactorio como "único"):

// a valid floating number window.generateUniqueNumber = function() { return new Date().valueOf() + Math.random(); }; // a valid HTML id window.generateUniqueId = function() { return "_" + new Date().valueOf() + Math.random().toFixed(16).substring(2); };


Si solo quieres un número único, entonces

var timestamp = new Date().getUTCMilliseconds();

te daría un número simple Pero si necesita la versión legible, tendrá un poco de procesamiento:

var now = new Date(); timestamp = now.getFullYear().toString(); // 2011 timestamp += (now.getFullMonth < 9 ? ''0'' : '''') + now.getFullMonth().toString(); // JS months are 0-based, so +1 and pad with 0''s timestamp += (now.getDate < 10) ? ''0'' : '''') + now.getDate().toString(); // pad with a 0 ... etc... with .getHours(), getMinutes(), getSeconds(), getMilliseconds()



usa esto: para crear un número único en javascript

var uniqueNumber=(new Date().getTime()).toString(36);

Realmente funciona. :)


yo suelo

Math.floor(new Date().valueOf() * Math.random())

Entonces, si por casualidad el código se activa al mismo tiempo, también hay una pequeña posibilidad de que los números aleatorios sean los mismos.


function UniqueValue(d){ var dat_e = new Date(); var uniqu_e = ((Math.random() *1000) +"").slice(-4) dat_e = dat_e.toISOString().replace(/[^0-9]/g, "").replace(dat_e.getFullYear(),uniqu_e); if(d==dat_e) dat_e = UniqueValue(dat_e); return dat_e; }

Llamada 1: UniqueValue (''0'')
Call 2: UniqueValue (UniqueValue (''0'')) // será complejo

Muestra de salida:
for (var i = 0; i <10; i ++) {console.log (UniqueValue (UniqueValue (''0'')));}
60950116113248802
26780116113248803
53920116113248803
35840116113248803
47430116113248803
41680116113248803
42980116113248804
34750116113248804
20950116113248804
03730116113248804