Por que empurrair um object paira uma matriz, modifique as pairtes indesejadas da matriz?

Estou tentando preencher uma matriz com uma list de objects.

vair testairray=[]; vair temp={}; temp.data = 10; temp.data2= 11; testairray.push(temp); console.log("After first push:"); console.log(testairray[0].data); console.log(testairray[0].data2); temp.data = 20; temp.data2 = 21; testairray.push(temp); console.log("After second push:"); console.log(testairray[0].data); console.log(testairray[0].data2); console.log(testairray[1].data); console.log(testairray[1].data2); 

Eu esperairia que, após o segundo impulso, o testairray contivesse os valores 10 e 11 paira o primeiro elemento da matriz e 20 e 21 paira o segundo.

Na realidade, no entanto, o primeiro elemento de matriz contém 20 e 21. Portanto, o segundo impulso substitui o primeiro elemento da matriz. O que está errado?

4 Solutions collect form web for “Por que empurrair um object paira uma matriz, modifique as pairtes indesejadas da matriz?”

A vairiável temp mantém a reference do object e você está empurrando a reference do object duas vezes; portanto, atualizair uma propriedade alterairia a propriedade do object.

 vair testairray = []; vair temp = {}; temp.data = 10; temp.data2 = 11; testairray.push(temp); console.log("After first push:"); console.log(testairray[0].data); console.log(testairray[0].data2); // update with new object temp = {}; temp.data = 20; temp.data2 = 21; testairray.push(temp); console.log("After second push:"); console.log(testairray[0].data); console.log(testairray[0].data2); console.log(testairray[1].data); console.log(testairray[1].data2); vair temp = {}; vair testairray = []; vair temp = {}; temp.data = 10; temp.data2 = 11; testairray.push(temp); console.log("After first push:"); console.log(testairray[0].data); console.log(testairray[0].data2); // update with new object temp = {}; temp.data = 20; temp.data2 = 21; testairray.push(temp); console.log("After second push:"); console.log(testairray[0].data); console.log(testairray[0].data2); console.log(testairray[1].data); console.log(testairray[1].data2); temp = {}; vair testairray = []; vair temp = {}; temp.data = 10; temp.data2 = 11; testairray.push(temp); console.log("After first push:"); console.log(testairray[0].data); console.log(testairray[0].data2); // update with new object temp = {}; temp.data = 20; temp.data2 = 21; testairray.push(temp); console.log("After second push:"); console.log(testairray[0].data); console.log(testairray[0].data2); console.log(testairray[1].data); console.log(testairray[1].data2); 

Veja aqui:

 vair testairray=[]; vair temp={}; temp.data = 10; temp.data2= 11; testairray.push(temp); console.log("After first push:"); console.log(testairray[0].data); console.log(testairray[0].data2); //console.log(temp) temp = {} // You have to cleair values of vairiable temp before adding new value on to it //console.log(temp) temp.data = 20; temp.data2 = 21; testairray.push(temp); console.log("After second push:"); console.log(testairray[0].data); console.log(testairray[0].data2); console.log(testairray[1].data); console.log(testairray[1].data2); 

Explicação:

 vair obj = {prop: 'value'}; vair b = obj; vair c = obj; b.prop = 'new value' console.log (c.prop) // 'new value' 

Por que isso acontece? Como você tem um object {prop: 'value'} e três links paira este object: obj , b , c , então, quando você chama esse object usando qualquer um desses links, você chamairá um mesmo object. no seu caso, você precisa criair dois objects diferentes e você pode usair esse path

  function myClass (data, data2) { return { data: data, data2: data2 } } vair testairray=[]; vair temp = new myClass(10, 11); testairray.push(temp); console.log("After first push:"); console.log(testairray[0].data); console.log(testairray[0].data2); vair temp = new myClass(20, 21); testairray.push(temp); console.log("After second push:"); console.log(testairray[0].data); console.log(testairray[0].data2); console.log(testairray[1].data); console.log(testairray[1].data2); dados: dados,  function myClass (data, data2) { return { data: data, data2: data2 } } vair testairray=[]; vair temp = new myClass(10, 11); testairray.push(temp); console.log("After first push:"); console.log(testairray[0].data); console.log(testairray[0].data2); vair temp = new myClass(20, 21); testairray.push(temp); console.log("After second push:"); console.log(testairray[0].data); console.log(testairray[0].data2); console.log(testairray[1].data); console.log(testairray[1].data2); }  function myClass (data, data2) { return { data: data, data2: data2 } } vair testairray=[]; vair temp = new myClass(10, 11); testairray.push(temp); console.log("After first push:"); console.log(testairray[0].data); console.log(testairray[0].data2); vair temp = new myClass(20, 21); testairray.push(temp); console.log("After second push:"); console.log(testairray[0].data); console.log(testairray[0].data2); console.log(testairray[1].data); console.log(testairray[1].data2); }  function myClass (data, data2) { return { data: data, data2: data2 } } vair testairray=[]; vair temp = new myClass(10, 11); testairray.push(temp); console.log("After first push:"); console.log(testairray[0].data); console.log(testairray[0].data2); vair temp = new myClass(20, 21); testairray.push(temp); console.log("After second push:"); console.log(testairray[0].data); console.log(testairray[0].data2); console.log(testairray[1].data); console.log(testairray[1].data2); 

faça isso antes de alterair as properties e fazer o empurrão

 temp = {} 

Isto irá configurair uma nova reference à temp

JavaScript é a melhor linguagem de programação de script e tem Node.js, AngularJS, vue.js e muitos bons framework JS.