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

175
Vistas
Problemas al mutar la matriz entre varios métodos: el valor devuelto siempre hace referencia a valores antiguos

Tengo un objeto con varios métodos que se ve así:

 export const myObject = { method1: function (arr, value) { this.method2(arr, value) this.method3(arr).filter(item => item === 'something') }, method2: function (arr, value) { if (true) { value = 'change this value' if (true) { value = 'then change this' arr = [...arr.slice(0, -1)] } } arr = [...arr, value] return arr }, method3: function (arr) { switch(arr.at(-1)) { case 1: arr = [...arr, 2] break case 2: arr = [...arr, 1] break default: arr = [...arr] } return this },

Mi problema es que cuando llamo al método 2 desde el método 1, recibo la misma referencia y no la matriz mutada. Si coloco los registros de la consola en mi código, puedo ver los cambios:

 myObject = { method1: function (value) { console.log('here my value is 10') this.method2(value) console.log('here my value is 10 again') }, method2: function (value) { value = value + 10 console.log('here my value is 20') return value console.log('see second log in method 1') },

Ya intenté cambiar los nombres de las variables y usar diferentes formas de insertar los valores antiguos en la matriz, pero siempre tengo el mismo problema: el valor devuelto es la matriz original.

Mi método 2 funciona porque estoy usando varios componentes en la aplicación, el problema es cuando llamo a este método desde un método hermano, con respecto al método 3, puedo colocar esa función dentro del método 1 porque no se necesita en ningún otro lugar, pero method2 como dije se reutiliza en otros componentes.

¿Qué estoy haciendo mal aquí? Lo siento si no estoy claro, esta es mi primera publicación en la comunidad, tiene el código relacionado aquí y la aplicación de trabajo aquí: React Calculator

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Los parámetros de Javascript siempre se pasan por valor. Puede cambiar las propiedades del valor que pasa y esos cambios serán visibles para el método de llamada. Pero si cambia el parámetro para que apunte a una referencia diferente, ese cambio no será visible para el método de llamada.

Por ejemplo:

 function A(arr) { arr[0] = 42; console.debug("Inside A", arr); // Output: [42, 1, 2, 3] } function B(arr) { arr = arr.slice(1); console.debug("Inside B", arr); // Output: [1, 2, 3] } let x = [0, 1, 2, 3]; console.debug("Initial", x); // Output: [0, 1, 2, 3] A(x); console.debug("After A", x); // Output: [42, 1, 2, 3] B(x); console.debug("After B", x); // Output: [42, 1, 2, 3]

Los cambios realizados por A son visibles fuera de la función, porque simplemente cambia una propiedad en el objeto que se pasó.

Los cambios realizados por B NO son visibles fuera de la función, porque reasignó el parámetro para referirse a una instancia de objeto diferente.

En su ejemplo, puede obtener la matriz actualizada utilizando el valor de retorno de method2 :

 method1: function (arr, value) { arr = this.method2(arr, value); this.method3(arr).filter(item => item === 'something') }

Sin embargo, no puede obtener la matriz actualizada de method3 .

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