Skip to content Skip to sidebar Skip to footer

Javascript Object Literal And Array

I have the following JavaScript code: oCoord = {x: null, y: null}; var aStack = []; oCoord.x = 726; oCoord.y = 52; aStack.push(oCoord); oCoord.x = 76; oCoord.y = 532; aStack.push

Solution 1:

You are using the same oCoord for all your coordinates objects.

Try this instead:

varaStack= [];aStack.push( { x:726, y:52} );aStack.push( { x:532, y:76} );aStack.push( { x:716, y:529} );

Solution 2:

You are using the same reference to your object. You need to create a new one each time.

E.g.

varaStack= [];aStack.push( { x:2, y:23 });aStack.push( { x:3, y:4 });aStack.push( { x:33, y:2 });

Or, if you prefer the style you wrote it in, do:

var aStack = []; 

var o = {};
o.x=1;
o.y=3;
aStack.push(o); 

var o = {};
o.x=21;
o.y=32;
aStack.push(o); 

var o = {};
o.x=14;
o.y=43;
aStack.push(o); 


alert( aStack[0].x ); 
alert( aStack[1].x ); 
alert( aStack[2].x );

Note we are re-declaring with var each time to create a new instance.

Solution 3:

varaStack= [];aStack.push({x:726;y:52});aStack.push({x:76;y:532});aStack.push({x:716;y:529});

Solution 4:

Egil Hansen's answer is probably better, but you could clone the object as an alternative solution:

// Some function to clone objects (e.g. using jQuery)functionclone(o) { return $.extend(true, {}, o); }

oCoord = { x: null, y: null };
var aStack = []; 

oCoord.x = 726; 
oCoord.y = 52; 
aStack.push( clone(oCoord) ); 

oCoord.x = 76; 
oCoord.y = 532; 
aStack.push( clone(oCoord) ); 

oCoord.x = 716; 
oCoord.y = 529; 
aStack.push( clone(oCoord) );

// console.log(aStack) =>// [Object x=726 y=52, Object x=76 y=532, Object x=716 y=529]

Solution 5:

You are overwriting the values of x and y in oCord.

So when you say

oCoord.x = 716;oCoord.y = 529;

it overwrites the previous value.

Post a Comment for "Javascript Object Literal And Array"