Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

180
Views
¿Cuál es el uso apropiado para el método .replace dentro de este contexto/dentro de un método .map?

Estoy tratando de recorrer una matriz de cadenas y para cada elemento (cadena) en esa matriz, cambie el carácter después del carácter de subrayado "_" a un carácter "*". Las cadenas son inmutables, por lo tanto, empujando todo esto a una nueva matriz.

La cadena funciona como se esperaba cuando se dirige directamente al guión bajo para el reemplazo:

 const t1 = ['underscore_case', 'first_name', 'some_variable', 'calculate_age', 'delayed_departure'] const t2 = t1.map(e => e.replace(e[e.indexOf('_')], '*')) // Output: ['underscore*case', 'first*name', 'some*variable', 'calculate*age', 'delayed*departure']

Pero en el momento en que se persigue la función real prevista, la de modificar el carácter que sigue al guión bajo, la salida se vuelve casi frenética, con "*" apareciendo a intervalos aleatorios a lo largo de cada cadena. En ambos el siguiente intento:

 const t1 = ['underscore_case', 'first_name', 'some_variable', 'calculate_age', 'delayed_departure'] const t2 = t1.map(e => e.replace(e[e.indexOf('_')+1], '*')) // Output: ['unders*ore_case', 'first_*ame', 'some_*ariable', 'c*lculate_age', '*elayed_departure']

Además, después de un poco de desesperación, ingresando manualmente en un índice como este:

 const t1 = ['underscore_case', 'first_name', 'some_variable', 'calculate_age', 'delayed_departure'] const t2 = t1.map(e => e.replace(e[5], '*')) // Output: ['under*core_case', 'first*name', 'some_*ariable', 'ca*culate_age', 'd*layed_departure']

La experimentación ha demostrado que, por alguna razón, el comportamiento inesperado, especialmente en los dos últimos elementos, solo tiende a surgir cuando el valor del índice especificado manualmente excede o es igual a 5 por alguna razón.

¿Por qué está pasando esto?

Después de algunas horas de probar varios enfoques de bucle y dividir cada operación fuera del encadenamiento, sigo volviendo al mismo resultado cuando uso el método de reemplazo, donde sea que ocurra, y he tenido que usar una solución alternativa que involucra el método de corte y los literales de plantilla.

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

El carácter que sigue al guión bajo también puede aparecer antes en la cadena, y cuando ese sea el caso, la llamada de replace encontrará esa ocurrencia y la reemplazará.

Entonces, por ejemplo, con "calculate_age", e[indexOf("_")+1] se evaluará como "a" (de "age"), pero replace encontrará una "a" al comienzo de la cadena y reemplazará el que tiene un asterisco.

En su lugar, utilice una expresión regular para esto:

 const t1 = ['underscore_case', 'first_name', 'some_variable', 'calculate_age', 'delayed_departure']; const t2 = t1.map(e => e.replace(/_./g, '_*')); console.log(t2);

El punto en la expresión regular es un comodín. Entonces, sea lo que sea (excepto la nueva línea), será reemplazado (junto con el guión bajo) con "_*".

En cuanto a lo que escribiste:

Las cadenas son inmutables, por lo tanto, empujando todo esto a una nueva matriz.

Sí, las cadenas son inmutables, pero las matrices son mutables, por lo que podría haber decidido reemplazar todas las cadenas en esa matriz con los reemplazos. Luego mutas la matriz, no las cadenas.

Habiendo dicho eso, está bien (y es una buena programación funcional) crear una nueva matriz.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!