Reputation: 8280
I am trying to create a 2 dimensional array but am getting this error.
I loop an object and try to assign them but it won't let me assign a value to the second dimension.
This is what I have:
//this is globally set
var gcollision = new Array();
function create() {
for (var X in sdata) {
X = parseInt(X);
for (var Y in sdata[X]) {
Y = parseInt(Y);
width = parseInt(sdata[X][Y][2]);
height = parseInt(sdata[X][Y][3]);
for (i = X; i != X + width; i++) {
//error occurs here "Uncaught TypeError: Cannot set property '3' of undefined"
gcollision[i][Y] = 1
for (j = Y; j != Y + height; j++) {
gcollision[X][j] = 1
}
}
}
}
How do I make it set the value of properly?
EDIT sdata looks like this:
var sdata = {"4":{"7":["1","7","3","3"]},"3":{"3":["2","8","1","1"]}};
Upvotes: 0
Views: 2907
Reputation: 224904
You'll need to initialize the first level of arrays, first.
function create() {
for (var X in sdata) {
X = parseInt(X);
gcollision[X] = [];
for (var Y in sdata[X]) {
Y = parseInt(Y);
width = parseInt(sdata[X][Y][2]);
height = parseInt(sdata[X][Y][3]);
for (i = X; i < X + width; i++) {
gcollision[i][Y] = 1;
for (j = Y; j < Y + height; j++) {
gcollision[X][j] = 1;
}
}
}
}
Upvotes: 1
Reputation: 4054
//this is globally set
var gcollision = new Array();
function create(){
for (var X in sdata) {
X = parseInt(X);
for (var Y in sdata[X]) {
Y = parseInt(Y);
width = parseInt(sdata[X][Y][2]);
height = parseInt(sdata[X][Y][3]);
for (i=X; i!= X+width; i++) {
if( typeof gcollision[i] == 'undefined' ) gcollision[i] = new Array();
gcollision[i][Y] = 1
for (j=Y; j!=Y+height; j++) {
if( typeof gcollision[X] == 'undefined' ) gcollision[X] = new Array();
gcollision[X][j] = 1
}
}
}
}
Basically, even though you created your array, those indices do not exist yet, so you cannot reference them as arrays until after you define them as such.
If you set up your for loops a bit more optimally, you don't have to do isset and can just create the gcol[index] = Array();
the right before the inner loop where it is first accessed.
Upvotes: 3