About javascript array

I want to get below result in the end.

[{x: '10', y: '5'}, {x: '8', y: '4'}]

I don't understand why the result get by the following code is

[{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);

Can you give me some advice on what I lack?


series is an object, what you have done in the loop basically change the value of members of series twice and push series into sample array twice. Since sample[0] and sample[1] point to the same object, they obviously have the same members, you can verify it with console.log(sample[0] === sample[1]).


Looks like you are pushing the references of the same object (i.e. series) into the array (i.e. sample) twice. That's why the two elements in the results list looks the same. You may want to make a little change (see below) to get what you want.

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);