¿Existe un concepto como un puntero a una cadena en javascript? O como se haría esto?
let s1 = "hi"; let s2 = "bye"; // I want to write my code like this [,].forEach(); // This is the bit where I want s1 and s2 in the [,] array to actually be pointers to a string [s1,s2].forEach(s => {if(s.length < 3) s += "*";}); // I want console.log(s1) === "hi*" // I want console.log(s2) === "bye" (unchanged)Javascript no tiene punteros.
Pero puede envolver un valor en un objeto y pasar referencias a ese objeto.
let s1 = { value: "hi" }; let s2 = { value: "bye" }; [s1,s2].forEach(s => { if(s.value.length < 3) s.value += "*"; }); console.log(s1.value) console.log(s2.value)Eso es probablemente lo más cerca que vas a estar de este comportamiento.
Creo que encontré una solución yo mismo.
¿Alguien podría comentar si esto es una buena práctica o no?
Utiliza lo nuevo en ES6 donde puedes asignar cosas [s1, s2] =
let s1 = "hi", s2 = "bye"; [s1, s2] = [s1, s2].map(s => s + (s.length < 3 ? "*" : ""));No puede reasignar identificadores individuales a menos que haga referencia específica al identificador. tan dado
let s1 = "hi"; La única forma de hacer que console.log(s1) muestre algo más sería tener una línea de código que no
s1 = // something elseY las cadenas son inmutables, por supuesto: para una cadena, tendría que reasignarla, ya que no puede mutarla.
Supongo que podría poner las cadenas en una matriz o un objeto, y luego examinar eso en su lugar:
const strings = { s1: 'hi', s2: 'bye', }; for (const [key, str] of Object.entries(strings)) { if (str.length < 3) { strings[key] += '*'; } } console.log(strings.s1);