I got a "TypeError: Cannot set property '0' of undefined" from this code snipet. Can anyone help me with this! Thank you very much
let array = [[]];
function generateField(width, height) {
for (let i = 0; i < height; i ) {
for (let j = 0; j < width; j ) {
array[i][j] = Math.floor(Math.random() * 3);
};
};
console.log(array);
return array;
}
generateField(5, 5);
CodePudding user response:
Shouldn't the array declaration be : let array = [][]
instead of let array = [[]]
?
CodePudding user response:
You just need to initialize the array before trying to insert to the sencond level.
let array = [];
function generateField(width, height) {
for (let i = 0; i < height; i ) {
if(!array[i]) array[i] = [];
for (let j = 0; j < width; j ) {
array[i][j] = Math.floor(Math.random() * 3);
};
};
console.log(array);
return array;
}
generateField(5, 5);
CodePudding user response:
Please consider these tips
- Do not use
array
as a variable name because it could produce error in some browsers - Because Javascript
Array
is basically linked list there is no need to declareArray
in this waylet array = [[]]
. For sure more suitable is creating newArray
and push it to existingArray
- Maybe declare
let array = [[]]
insidegenerateField
function to make it more reusable because looking at your code I see you want function which creates newArray
withn
rows andm
columns with random numbers and whenlet array = [[]]
is outside your function will be modify every time when you callgenerateField
Working code below:
function generateField(width, height) {
let rows = []
for (let i = 0; i < height; i ) {
let columns = []
for (let j = 0; j < width; j ) {
columns.push(Math.floor(Math.random() * 3))
}
rows.push(columns)
};
return [...rows] // create a copy of `Array` named `rows`
}
let matrix = generateField(3, 4)
console.log(matrix)
Output
Array(4) [ (3) […], (3) […], (3) […], (3) […] ]
0: Array(3) [ 0, 1, 2 ]
1: Array(3) [ 0, 2, 0 ]
2: Array(3) [ 1, 2, 2 ]
3: Array(3) [ 2, 1, 2 ]
length: 4
<prototype>: Array []