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

281
Vistas
Cómo modificar una variable global dentro de una función en javascript, es decir, modificar la variable en el lugar

Entonces, a continuación puede encontrar mi solución (muy básica y no optimizada) para el desafío 189 de Leetcode 'Rotar matriz' . El objetivo de este desafío se plantea de la siguiente manera: Dada una matriz, gire la matriz a la derecha en k pasos, donde k no es negativo.

Ahora, mi solución no se acepta ya que, de alguna manera, la variable global nums permanece sin cambios después de la llamada a la función. ¿Porqué es eso? De alguna manera, nums se trata como una variable local y no cambia la variable global nums pasada. Entiendo que probablemente se deba a cómo javascript trata los ámbitos variables, pero parece que no encuentro recursos que puedan ayudarme a comprender este ejemplo.

 /** * @param {number[]} nums * @param {number} k * @return {void} Do not return anything, modify nums in-place instead. */ var rotate = function(nums, k) { array2 = Array.from(nums) nums.map((num) => { array2[(nums.indexOf(num)+k)%nums.length] = num }) nums = Array.from(array2) console.log(nums) // returns expected answer };
 Your input [1,2,3,4,5,6,7] 3 Your stdout [5,6,7,1,2,3,4] Your answer [1,2,3,4,5,6,7] Expected answer [5,6,7,1,2,3,4]
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

La función map no modifica la matriz original. Además, parece que lo estás usando incorrectamente.

Está utilizando map para establecer los valores de array2 y luego establecer nums en una copia de array2 . Esto no modificará el objeto original contenido en nums .

Por supuesto, si registra nums dentro de la función, le dará el valor actualizado, pero este valor está dentro del alcance de la función y no será accesible desde el exterior.

En lugar de métodos de matriz, para este tipo de programación impura, debe usar un bucle for.

 var rotate = function(nums, k) { array2 = Array.from(nums); for (const i in nums) nums[i] = array2[(i+k)%nums.length]; };
about 4 years ago · Juan Pablo Isaza Denunciar

0

Su enfoque es correcto, pero aquí está el problema:

 var rotate = function(nums, k) { array2 = Array.from(nums) nums.map((num) => { array2[(nums.indexOf(num)+k)%nums.length] = num //Making changed to array2 }) nums = Array.from(array2) //Completely changing the reference of nums console.log(nums) // returns expected answer }; let nums = [1,2,3,4,5,6,7]; rotate(nums,3); console.log(nums); //Original nums still as it is

Si observa el código anterior, nums en realidad no está cambiando. La razón es que está creando una matriz array2 completamente nueva. Dentro de su .map() , está haciendo todo tipo de cambios y asignándolo nuevamente a nums . Pero la referencia de los nums originales no ha cambiado.

En realidad, debería hacer cambios en sus array2 nums obtener ayuda:

 var rotate = function(nums, k) { array2 = Array.from(nums) array2.forEach((num) => { nums[(array2.indexOf(num)+k)%array2.length] = num }) console.log(nums) // returns expected answer }; let nums = [1,2,3,4,5,6,7]; rotate(nums,3); console.log(nums);

PD: .map() es cuando desea que se devuelva una nueva matriz transformada. De lo contrario, puede simplemente usar .forEach o un bucle for.

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