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

265
Views
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 answers
Answer question

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 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!