Algunos argumentan que la programación es un arte y, en última instancia, sólo pueden ponerse de acuerdo sobre todo cuando se encontró con soluciones muy diferentes para el mismo problema. Para entender cómo esto es verdad ¿cómo una misma necesidad en medisimo lenguaje (JavaScript) pueden ser resueltos por métodos completamente diferente y original.
Almohadilla cero a la izquierda
. Un número, pero la discusión es válida también para cualquier cadena, como la 123 se puede llenar a la izquierda - para atar - con un número de ceros, por ejemplo, 00123 . Esta necesidad, en varias ocasiones y es útil para poner en una columna - o al menos mostrar - una serie de una manera limpia, de manera implícita que indica su valor máximo. . En el juego, por ejemplo, la puntuación clásica (la puntuación) se refiere a menudo 001234 , lo que indica que en la mayoría de nosotros llegaremos a 999999 . He aquí cómo el mismo problema ha sido resuelto por varios desarrolladores:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | / ** * Cadena Pad Izquierda * * @ Desde http://snipplr.com/view/8423/left-pad-string/ * @ Autor web-http: / / www.mechanicmatt.com/ * * @ Param num - Striga para llenar * @ Param totalChars - El número total de caracteres, incluyendo los "ceros" * @ Param padWidth - carácter utilizado para rellenar, por defecto "0" * / num , totalChars , padWith ) { leadingZeros función (num, totalChars, padWith) { "" ; num = num + ""; padWith ) ? padWith : "0" ; ? padWith = (padWith) padWith: "0"; num. length < totalChars ) { if (longitud n. <totalChars) { num. length < totalChars ) { while (n º de longitud <totalChars) { num ; num = num + padWith; } { } Else {}} num. length > totalChars ) { //if padWith was a multiple character string and num was overpadded if (longitud> No. totalChars) {/ / si se padWith cadena de caracteres múltiples y números overpadded se ( ( num. length - totalChars ) , totalChars ) ; num = num substring ((N º de longitud - totalChars), totalChars).; { } Else {}} volver num; } leadingZeros ( "asdf" , 10 , "0" ) ) ; alert (leadingZeros ("asdf", 10 "0")); |
scegliendo anche il tipo di carattere da usare tramite padWidth , invece del default 0 . Esta solución es muy elocuente, sin embargo, le permite agregar cualquier número de 0 al número num elegir el tipo de fuente utilizada por padWidth , en lugar del predeterminado 0 .
Muy original, sin embargo, esta solución:
1 2 3 4 5 6 7 8 9 10 11 12 13 | / ** * String_pad * * @ Desde http://snipplr.com/view/700/stringpad/ * @ Autor http://d.hatena.ne.jp/brazil/20060721/1153489937 * * @ Param str - Striga para llenar * @ Param len - Número de caracteres, incluyendo los "ceros" * @ Param ch - carácter utilizado para rellenar * / str , len , ch ) { return new Array ( len - ( '' + str ) . length + 1 ) . join ( ch ) + str } plataforma de la función (str, len, ch) {return new Array. (len -. (''str +) de longitud + 1) join (ch) + str} pad ( 56 , 4 , '0' ) ) ; // 0056 alert (pad (56, 4, '0 ')) / / 0056 |
Mismo resultado, con un enfoque completamente diferente. . Una vez más tenemos la oportunidad de decidir el número de caracteres de relleno utilizando el parámetro len y el tipo de fuente que desea utilizar con ch . Que falta es el uso de incumplimiento previsto en la función anterior.
El que yo uso, pero ...:
1 2 3 4 5 6 7 8 9 10 11 12 | / ** * String_pad * * @ Autor Giovambattista Fazioli * @ Web http://www.undolog.com * * @ Param s - Striga para llenar * @ Param s - la cadena de caracteres que indica es que la longitud * Tales como "0000" = longitud de caracteres "0" 4 * / s , l ) { return ( l. substr ( 0 , ( l. length - s. length ) ) + s ) ; } la función de relleno (s, l) {return (l substr (0, (longitud l - longitud s)) + s);} padding ( '123' , '0000' ) ) ; alert (relleno ('123 ', '0000')); |
Si usted tiene otras soluciones interesantes no dudéis en comentar ![]()










La línea 12 de su función supongo debe ser:
alert (relleno ('123 ', '0000'));@ Napolux:
¡Correcto!
Interesante, los tres enfoques diferentes!
[...] Ya se ve en la variedad después de la codificación y la codificación de los enfoques que un desarrollador puede tener que resolver un problema son diferentes y [...]
He probado la sincronización de los tres métodos. El primero se espera que sea más lento, mientras que el tercero es condenadamente rápido.
Me lanzó 100.000 veces al método con el fin de hacer que el relleno a diez dígitos de un número de cuatro dígitos, y que he recogido de vez en cuando el tiempo de ejecución con un simple
2
3
4
5
6
7
8
0 ; var tiempo = 0;
... ) { para (...) {
new Date ) . getTime ( ) ; tiempo = (new Date) getTime ().;
robaDaEseguire ();
= ( ( new Date ) . getTime ( ) - time ) ; los tiempos de [i] = ((nueva fecha) getTime () - tiempo.)
}
Al final he calculado la media aritmética de los tiempos individuales.
El primer algoritmo utiliza 0,06896 segundos que tarda el segundo y el tercero va 0,06896 hasta 0,01331.
El aumento del número de lanzamientos de un millón, la diferencia entre las tres empieza a ser palpable:
El primer algoritmo utiliza 0.047184 segundos, el segundo y el tercero sólo 0.018635 0.028644.
Mi investigación se ha convertido en inútil por ahora. Nos vemos pronto, los hombres jóvenes.
PS: este es, obviamente, se toma con una sonrisa ...
@ Unwiredbrain:
Por curiosidad, el navegador que han llevado a cabo las pruebas? ¿Has probado otros navegadores para ver si hay diferencias entre los navegadores y?
@ Napolux: bravo! Que ha tomado las palabras de la boca
Yo ... Yo estaba intrigado para tratar de Google Chrome 
PHP sigue siendo los mismos cambios, JS basado en el navegador, ¿verdad?
@ Napolux:
Le expliqué mal ... me refiero a "cambiar el motor de JS basado en el navegador"
@ Napolux , Giovambattista Fazioli : Firefox 3.0.3 en Linux.
Opera, por supuesto, pone de manifiesto los resultados por decir lo menos interesante: la orden de 0.010882, 0.013681 y (escuchar escuchar) 0,007994 milisegundos! En la práctica, 77, 52 y 57% menos!
Ah, ahora veo que en el comentario anterior estaba hablando acerca de la segunda: de hecho, es milisegundos .
Me gustaría ver cómo son las cosas en casa KHTML / Webkit, y Firefox 3.1, pero todavía no tienen la fuerza y estabilidad suficientes para poder hacer algunas pruebas serias. Por favor, negar que si usted sabe algo al respecto, me encantaría ...
En cuanto a Chrome, que está disponible para Linux que me apriete muy bien ...
Saludos.
PD: Pronto voy a publicar las fuentes de conjuntos de pruebas, ahora realmente no tengo tiempo ...
Pero sobre todo: ¿por qué mi gravatar se ha ido a la alegre doncellas que son auto-comercialización Misterios de getAvatar ...
@ Napolux:
¡Correcto! Sin embargo, para ser más precisos, pero PHP no es lo mismo, hay diferentes versiones en diferentes servidores con diferentes extensiones. Pero esto es para ser considerado para casos mucho más complicados que el nuestro.
@ Giovambattista Fazioli:
Impuestos ...
@ Napolux: Sólo usted con que no puede permitirse el lujo de ser "preciso" ... por lo menos a entender lo que quería decir
y apreciar la imposición 
Ahora comienzo a trolleggiare aquí, un poco "a mí como lo hicieron para KB / kb / kb y compañía.
@ Napolux : Kib y KiB resolverlo todo.