Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

211
Vistas
¿Cómo manipular eficientemente cadenas en Javascript?

¿Cómo realizo cambios de manera eficiente en una cadena en Javascript sin crear una nueva cadena cada vez que hago un cambio? El código adjunto ilustra esto, ya que cada operación "resultado +=" generará una nueva cadena.

La idea de usar un Unit8Array como área de trabajo parece fallar porque la conversión a una cadena es igual de ineficiente.

 ; Use mask to change characters in string to a ; '-' if mask dictates that. function maskOutput(input, mask) { let result = ''; for (let i=0; i < input.length; i++){ if (mask.charAt(i) === 'X') { result += '-'; } else { result += input.charAt(i); } } return result; }
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Lo primero que haría es verificar si las cadenas temporales realmente estaban causando un problema para mi página/aplicación, porque los motores de JavaScript son extremadamente buenos para optimizar problemas comunes como muchas cadenas temporales, especialmente en casos como su maskOutput donde la cadena es el resultado de la concatenación de cadenas. (V8, el motor en Chrome y en otros lugares, lo hace cuando es necesario al combinar cadenas parciales en una lista enlazada). Parece poco probable que la concatenación de cadenas en su función maskOutput sea un cuello de botella para su página/aplicación. Solía ser una práctica bastante estándar que verías código construyendo una cadena grande usando una matriz y luego .join("") al final, porque era más rápido alrededor de 2009, pero los motores de JavaScript han avanzado mucho desde entonces entonces y recuerdo que se volvió más rápido usar += en una cadena hace varios años.

Si hubiera algún caso de uso (presión de la memoria, lo que sea) en el que las cadenas temporales fueran un problema, podría usar una matriz simple¹ de caracteres individuales, convirtiendo una vez (de cadena a matriz) al principio si es necesario (no en su caso) y al final (de matriz a cadena). Pero para una cadena corta como las que imagino que maneja maskOutput , como usted dice, la sobrecarga no valdría la pena.

Pero solo para completar:

 function maskOutput(input, mask) { const len = input.length; let result = Array(len); // Some engines actually do optimize this for (let i = 0; i < len; i++) { if (mask[i] === 'X') { // No need for a method call result[i] = "-"; } else { result[i] = input[i]; } } return result.join(""); }

¹ Uint8Array sería una mala elección, porque:

  • Las cadenas se componen de valores de 16 bits ( unidades de código UTF-16). Si desea utilizar una matriz con tipo, Uint16Array sería más apropiado.
  • Poner un valor en un Uint8Array / Uint16Array requiere convertirlo del tipo de número de JavaScript a un entero sin signo de 8 bits/16 bits (y lo contrario en la lectura), que es realmente barato pero no es gratis. Y presumiblemente tendría que usar charCodeAt para obtener el valor para almacenar.
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda