Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

257
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda