Quiero obtener el siguiente resultado al final.
[{x: '10', y: '5'}, {x: '8', y: '4'}]No entiendo por qué el resultado obtenido por el siguiente código es
[{x: '8', y: '4'}, {x: '8', y: '4'}] var test =[["10", "5"],["8","4"]]; var series = {}; var sample = []; for (var i = 0 ; i < test.length ; i++){ series.x = test[i][0]; series.y = test[i][1]; console.log(i); console.log(series); sample.push(series); }; console.log(sample);¿Puedes darme algún consejo sobre lo que me falta?
series es un objeto, lo que ha hecho en el bucle básicamente cambia el valor de los miembros de la series dos veces y empuja la series a la matriz de sample dos veces. Dado que sample[0] y sample[1] apuntan al mismo objeto, obviamente tienen los mismos miembros, puede verificarlo con console.log(sample[0] === sample[1]) .
Parece que está insertando las referencias del mismo objeto (es decir, serie) en la matriz (es decir, muestra) dos veces. Es por eso que los dos elementos en la lista de resultados se ven iguales. Es posible que desee hacer un pequeño cambio (ver a continuación) para obtener lo que desea.
var test =[["10", "5"],["8","4"]]; var series; /* declare a new variable */ var sample = []; for (var i = 0 ; i < test.length ; i++){ series = {}; /* assign a new object */ series.x = test[i][0]; series.y = test[i][1]; console.log(i); console.log(series); sample.push(series); /* push the reference of the new object for loop i */ }; console.log(sample);Hola @shinobu, estás cometiendo un simple error, no estás borrando el objeto dentro del objeto. Estoy agregando una línea al código y lo resolverá.
var test =[["10", "5"],["8","4"]]; var series = {}; var sample = []; for (var i = 0 ; i < test.length ; i++){ series = {}; series.x = test[i][0]; series.y = test[i][1]; sample.push(series); }; console.log(sample);