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

256
Vistas
JS: ¿Por qué todos los elementos de una matriz parecen compartir el mismo punto de referencia?

Descripción de mi código:

  1. La primera función ( makeVector ) llena todos los elementos del rompecabezas vectorial ([]) con un elemento del vector fila ([2, 4, 1, 3]).
  2. La segunda función ( permuteVector ) es una función que crea una clase de cola a partir de un vector y luego desplaza todos los elementos por n elementos a la izquierda y luego devuelve un vector de entrada modificado ( puzle ).

Problema:

El problema es que ( permuteVector ) funciona perfectamente si itero sobre una matriz anidada que se declara así: let test = [[3, 5, 3],[2, 6, 7],[10, 0, 9], [5, 4, 3, 2]] . En ese caso, puedo cambiar solo un elemento de una matriz (por ejemplo , test[1] ) sin afectar a todos los demás elementos. Cuando trato de hacer lo mismo con la matriz de rompecabezas (como se pretendía) creada con ( makeVector ), no puedo cambiar un solo elemento sin afectarlos a todos.
Parece que todos los elementos de la matriz del rompecabezas tienen el mismo punto de referencia. Agradecería cualquier pista.

 class Queue { constructor() { this.q = []; } enqueue(el) { this.q.push(el); } dequeue() { if (this.q.length > 0) { return this.q.shift(); } else { return 'Underflow'; } } isEmpty() { return this.q.length == 0; } head() { if (this.q.length > 0) { return this.q[0]; } else { return 'Queue is empty'; } } show() { return this.q; } } // let row = [2, 4, 1, 3]; // let puzzle = []; // const makeVector = function (row, n) { let puzzle = []; for (let i = 0; i < n; i++) { puzzle.push(row); } return puzzle; }; // makeVector(row, 4); let puzzle = makeVector(row, 4); console.log(puzzle); // const permuteVector = function (row, p) { let q1 = new Queue(); //1. Creating queue from a vector for (let i = 0; i < row.length; i++) { q1.enqueue(row[i]); } //2. Shifting queue by p elements to the left for (let i = 0; i < p; i++) { if (p == 0) { return row; } else { let head = q1.head(); q1.enqueue(head); q1.dequeue(head); } } //3. Populating Queue to original Vector row.splice(0, row.length, ...q1.show()); }; // With this it works - I can shift single element of an array without affecting others let test = [ [3, 5, 3], [2, 6, 7], [10, 0, 9], [5, 4, 3, 2] ]; permuteRows(test[1], 2); // This will not work as intended, it will affect all elements instead of one permuteVector(puzzle[0], 1);
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

El problema es que le estás asignando a tu rompecabezas la fila, y eso se pasa por referencia, así que cuando modificas la fila, estás alterando esa referencia (que es cuatro veces en tu matriz de rompecabezas). Debes copiar el valor:

 puzzle.push([...row]);

Más información sobre el valor y la referencia de JavaScript: https://www.geeksforgeeks.org/primitive-and-reference-value-in-javascript/

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