0

I've created a mutidimensional array like this: let array = new Array(7).fill(Array(7).fill());

Then I tried to change array[0][0], like this: array[0][0] = 1;

But somehow, this changes the first element of every inner array. This is the output I've got:

Array(7)
0: (7) [1, undefined, undefined, undefined, undefined, undefined, undefined]
1: (7) [1, undefined, undefined, undefined, undefined, undefined, undefined]
2: (7) [1, undefined, undefined, undefined, undefined, undefined, undefined]
3: (7) [1, undefined, undefined, undefined, undefined, undefined, undefined]
4: (7) [1, undefined, undefined, undefined, undefined, undefined, undefined]
5: (7) [1, undefined, undefined, undefined, undefined, undefined, undefined]
6: (7) [1, undefined, undefined, undefined, undefined, undefined, undefined]

I can't imagine what I did wrong. Any ideas?

2 Answers2

1
const newArr = (a, b) => {
  return Array.from({length: a}, (_, i) => {
    return Array.from({length: b}, (_, j) => {
      return [i, j]
    })
  })
}
console.log(newArr(4, 3));
vueAng
  • 415
  • 2
  • 7
0

You are using the same array reference when filling with the array. Instead use a .map() to fill instead.

const arr2D = Array(7).fill(0).map(()=> Array(7).fill(0));
Invizi
  • 1,270
  • 1
  • 7
  • 7