# Create N dimensional grid of points in Javascript

I know there are similar questions out there (the closest one I found was this JavaScript; n-dimensional array creation) but most one them are in Python and even this one I found I tried to implement in my code and It didn’t work.

So I want to create a function createGrid(L,n) that take as parameters two arrays of same size, L and n. In these, L[i] would specify the size of the grid in dimension i and n[i] would specify the number of points in the same dimension (such as the spacing between points is L[i]/(n[i] – 1). For example, for two dimensions lets say I call “let grid = createGrid([10,10],[2,2])” then the function should return an n+1 dimension array like this: [[[0,0],[0,10]], [[10,0], [10,10]].

So If I want to access a point in the grid I could simply type, for example, grid, wich will return the point [10,0].

In this moment I am hardcoding this for 3 dimensions like this:

```let create3DSquareGrid = function(L, n){
//L should be an array [Lx, Ly, Lz], if not they are all the same
if(!Array.isArray(L)){
L = [L,L,L];
}
//n should be an array [nx, ny, nz], if not they are all the same
if(!Array.isArray(n)){
n = [n,n,n];
}
//calculate the dl of each dimension
var dl = L.map((val,i)=> Math.round(val/(n[i]-1)));

//create the grid
let grid = []
for(let i=0; i<n; i++){
let x = i*dl;
let gridJ = [];
for(let j=0; j<n; j++){
let y = j*dl;
let gridK = [];
for(let k=0; k<n; k++){
let z = k*dl;
gridK.push([x,y,z]);
}
gridJ.push(gridK)
}
grid.push(gridJ);
}
return grid;
}
```

But I want to extend this by any number of dimensions. I tried to recurse as shown at the question I linked in the beginning but it simply did not work, so I tweaked it a little bit and things got worse, I from that point I just started getting more and more confused. If you can, please help! And thanks a lot!

You can use a loop. It is a great way to solve this problem.

```function createGrid(L, n) {
var ans = L
for (i = 1; i < L.length; i++) {
var tmp = []
for (el of ans) {
innerTmp = []
for (j = 0; j < L.length; j++) {
innerTmp.push([el, L[j]])
}
tmp.push(innerTmp)
}
ans = tmp
}
return ans
}
```