Javascript, failed to "save" the ordering of arrays

0

Failed to "save" arrays sorting

I have a code to sort an array and store its values in a second array, but when I order it again it modifies the value assigned to the second array and instead of appearing:

Ordenamento Alfabético: 

Chave 0 Valor 1
Chave 1 Valor 10
Chave 2 Valor 2
Chave 3 Valor 200
Chave 4 Valor 3

Ordenamento Numérico: 

Chave 0 Valor 1
Chave 1 Valor 2
Chave 2 Valor 3
Chave 3 Valor 10
Chave 4 Valor 200

Appears:

Ordenamento Alfabético: 

Chave 0 Valor 1
Chave 1 Valor 2
Chave 2 Valor 3
Chave 3 Valor 10
Chave 4 Valor 200

Ordenamento Numérico: 

Chave 0 Valor 1
Chave 1 Valor 2
Chave 2 Valor 3
Chave 3 Valor 10
Chave 4 Valor 200

Can anyone help me and tell me what I'm doing wrong?

// Variáveis
var matriz = [];
var novamatriz = [];
var i = 0;

// Principal
matriz = [1, 2, 10, 3, 200];

matriz.sort();

novamatriz[0] = matriz;

matriz.sort(function(a, b) {
  return (a - b);
});

novamatriz[1] = matriz;

// Console
console.log("Ordenamento Alfabético: \n\n");

for (i = 0; i < novamatriz[0].length; i++) {
  console.log("Chave " + i + " Valor " + novamatriz[0][i]);
}

console.log("\nOrdenamento Numérico: \n\n");

for (i = 0; i < novamatriz[1].length; i++) {
  console.log("Chave " + i + " Valor " + novamatriz[0][i]);
}
    
asked by anonymous 26.04.2018 / 20:36

1 answer

0

I made some commented changes to your code:

var matriz = [];
var novamatriz = [];
var i = 0;

// Principal
matriz = [1, 2, 10, 3, 200];

matriz.sort();

/* aqui estou fazendo uma copia realmente do objeto
   para isso, serializo e depois deserializo, criando algo novo */
novamatriz[0] = JSON.parse(JSON.stringify(matriz));

matriz.sort(function(a, b) {
  return (a - b);
});

/* aqui mesmo processo */
novamatriz[1] = JSON.parse(JSON.stringify(matriz)) ;

// Console
console.log("Ordenamento Alfabético: \n\n");

for (i = 0; i < novamatriz[0].length; i++) {
  console.log("Chave " + i + " Valor " + novamatriz[0][i]);
}

console.log("\nOrdenamento Numérico: \n\n");

for (i = 0; i < novamatriz[1].length; i++) {
  // nessa linha no seu código estava pegando novamatriz[0] que estava errado
  console.log("Chave " + i + " Valor " + novamatriz[1][i]);
}

In summary, I used the combination of JSON.stringify and JSON.parse to create a new object, not a reference to the same object.

Here is an answer commenting on the same problem: how -make-pass-by-value-in-javascript

And here's another good answer: link

    
26.04.2018 / 21:11