Veo algunas soluciones de proyectos de código .
¿Pero hay una implementación regular en JavaScript?
javascript
stringbuilder
leora
fuente
fuente
Respuestas:
Si tiene que escribir código para Internet Explorer, asegúrese de elegir una implementación que utilice combinaciones de matriz. Las cadenas de concatenación con el operador
+
o+=
son extremadamente lentas en IE. Esto es especialmente cierto para IE6. En navegadores modernos+=
generalmente es tan rápido como la matriz se une.Cuando tengo que hacer muchas concatenaciones de cadenas, generalmente lleno una matriz y no uso una clase de generador de cadenas:
Tenga en cuenta que los
push
métodos aceptan múltiples argumentos.fuente
[foo(), "bar", "baz"].join("");
funciona.push
podía aceptar múltiples argumentos. Las cosas al azar que aprendes.Acabo de volver a comprobar el rendimiento en http://jsperf.com/javascript-concat-vs-join/2 . Los casos de prueba concatenan o unen el alfabeto 1,000 veces.
En los navegadores actuales (FF, Opera, IE11, Chrome), "concat" es aproximadamente 4-10 veces más rápido que "join".
En IE8, ambos devuelven resultados iguales.
Desafortunadamente, en IE7, "unirse" es aproximadamente 100 veces más rápido.
fuente
No, no hay soporte integrado para construir cadenas. Tienes que usar concatenación en su lugar.
Por supuesto, puede hacer una variedad de diferentes partes de su cadena y luego llamar
join()
esa matriz, pero luego depende de cómo se implemente la unión en el intérprete de JavaScript que está utilizando.Hice un experimento para comparar la velocidad del
str1+str2
método versus elarray.push(str1, str2).join()
método. El código era simple:Lo probé en Internet Explorer 8 y Firefox 3.5.5, ambos en Windows 7 x64.
Al principio probé en un pequeño número de iteraciones (unos cientos, algunos miles de artículos). Los resultados fueron impredecibles (a veces la concatenación de cadenas tardó 0 milisegundos, a veces tomó 16 milisegundos, lo mismo para la unión de matriz).
Cuando aumenté el recuento a 50,000, los resultados fueron diferentes en diferentes navegadores: en Internet Explorer la concatenación de cadenas fue más rápida (94 milisegundos) y la unión fue más lenta (125 milisegundos), mientras que en Firefox la unión de la matriz fue más rápida (113 milisegundos) que unión de cadenas (117 milisegundos).
Luego aumenté el conteo a 500'000. Ahora el
array.join()
era más lento que la concatenación de cadenas en ambos navegadores: la concatenación de cadenas era de 937 ms en Internet Explorer, 1155 ms en Firefox, la combinación de matrices 1265 en Internet Explorer y 1207 ms en Firefox.El recuento máximo de iteraciones que pude probar en Internet Explorer sin tener "el script tarda demasiado en ejecutarse" fue 850,000. Luego, Internet Explorer era 1593 para la concatenación de cadenas y 2046 para la unión de matrices, y Firefox tenía 2101 para la concatenación de cadenas y 2249 para la unión de matrices.
Resultados : si el número de iteraciones es pequeño, puede intentar usar
array.join()
, ya que podría ser más rápido en Firefox. Cuando el número aumenta, elstring1+string2
método es más rápido.ACTUALIZAR
Realicé la prueba en Internet Explorer 6 (Windows XP). El proceso se detuvo para responder de inmediato y nunca terminó, si probé la prueba en más de 100,000 iteraciones. En 40,000 iteraciones los resultados fueron
Esto significa que si necesita admitir Internet Explorer 6, elija
array.join()
cuál es mucho más rápido que la concatenación de cadenas.fuente
join()
es parte de ECMAScript y afaik cada intérprete de JavaScript lo implementa. ¿Por qué "dependería"?Ese código se parece a la ruta que desea tomar con algunos cambios.
Querrás cambiar el método de agregar para que se vea así. Lo he cambiado para aceptar el número 0 y hacer que regrese
this
para que pueda encadenar sus anexos.fuente
null
,false
cadenas vacíasundefined
, oNaN
.La versión ECMAScript 6 (también conocida como ECMAScript 2015) de JavaScript introdujo literales de cadena .
Observe que las marcas de retroceso, en lugar de comillas simples, encierran la cadena.
fuente
En C # puedes hacer algo como
En JavaScript podrías hacer algo como
fuente
{0}
se reemplaza contiene{1}
.Para aquellos interesados, aquí hay una alternativa para invocar Array.join:
La salida, como se esperaba, es la cadena 'foobar'. En Firefox, este enfoque supera a Array.join pero es superado por + concatenación. Como String.concat requiere que cada segmento se especifique como un argumento separado, la persona que llama está limitada por cualquier límite de recuento de argumentos impuesto por el motor de ejecución de JavaScript. Consulte la documentación de Function.prototype.apply () para obtener más información.
fuente
He definido esta función:
Y se puede llamar como c #:
Resultado:
fuente
Cuando me encuentro haciendo mucha concatenación de cadenas en JavaScript, empiezo a buscar plantillas. Handlebars.js funciona bastante bien manteniendo HTML y JavaScript más legibles. http://handlebarsjs.com
fuente
Qué tal si
sys.StringBuilder()
probar el siguiente artículo?https://msdn.microsoft.com/en-us/library/bb310852.aspx
fuente