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

108
Views
Invierta una cadena usando el método de dos punteros en JS

Estoy tratando de invertir una cadena. Conozco la función .reverse y otros métodos en Js para hacerlo, pero quería hacerlo con este método de dos puntos.

El problema es que la cadena no se actualiza. ¿Hay algo de lo que no estoy al tanto de las cadenas? ¿Qué pasa aquí?

 function reverseString(s) { let lengthOfStr = 0; if ((s.length - 1) % 2 == 0) { lengthOfStr = (s.length - 1) / 2 } else { lengthOfStr = ((s.length - 1) / 2) + 1; } let strLengthLast = s.length - 1; for (let i = 0; i <= lengthOfStr; i++) { let pt1 = s[i]; let pt2 = s[strLengthLast]; s[i] = pt2; s[strLengthLast] = pt1; console.log('----', s[i], s[strLengthLast]); strLengthLast--; } return s; } console.log(reverseString('hello'));

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

0

A diferencia de C, las cadenas en JavaScript son inmutables, por lo que no puede actualizarlas indexándolas. Ejemplo:

 let s = 'abc'; s[1] = 'd'; console.log(s); // prints abc, not adc

Tendrías que hacer algo más extenso en lugar de s[i] = pt2; , como s = s.substring(0, i) + pt2 + s.substring(i + 1); , y de manera similar para s[strLengthLast] = pt1; (o combínelos en una expresión con 3 llamadas a substring ).

about 4 years ago · Juan Pablo Isaza Report

0

No estoy seguro de por qué no actualiza la cadena, pero si maneja el reemplazo como una matriz/lista, funciona de la siguiente manera:

 function reverseString(s) { let lengthOfStr = 0; sSplit = s.split(""); if ((s.length - 1) % 2 === 0) { lengthOfStr = (s.length - 1) / 2 } else { lengthOfStr = ((s.length - 1) / 2) + 1; } let strLengthLast = s.length - 1; for (let i = 0; i <= lengthOfStr; i++) { let pt1 = sSplit[i]; let pt2 = sSplit[strLengthLast]; sSplit[i] = pt2; sSplit[strLengthLast] = pt1; console.log('----', sSplit[i], sSplit[strLengthLast],sSplit); strLengthLast--; } return sSplit.join(""); } console.log(reverseString('Hello'));

devuelve: Hola => olleH

about 4 years ago · Juan Pablo Isaza Report

0

Como se explica en los comentarios, las respuestas y la documentación, las cadenas son inmutables en JavaScript.

La capacidad de asignar aparentemente un valor de propiedad a un valor de cadena primitivo es el resultado del diseño del motor JavaScript temprano que creaba temporalmente un objeto String a partir de cadenas primitivas al llamar a un método String.prototype en el primitivo. Si bien no se produjo un error al asignar una propiedad al objeto temporal, fue inútil ya que el objeto se descartó entre la llamada al método String y la reanudación de la ejecución del código de usuario.

La buena noticia es que esto se ha solucionado. Poniendo

 "use strict";

al comienzo de un archivo JavaScript o cuerpo de función hace que el compilador genere un error de sintaxis que indica que las "propiedades" de la cadena primitiva son de solo lectura.

Hay muchas formas de escribir una función para invertir cadenas sin llamar a String.prototype.reverse . aquí hay otro ejemplo

 function strReverse(str) { "use strict"; let rev = []; for( let i = str.length; i--;) { rev.push(str[i]); } return rev.join(''); } console.log( strReverse("Yellow") ); console.log( strReverse("").length);

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!