0

I have the following class: I am trying to set the value of this.grid[0][0] to 0, however when I run the following code I get the output in the console:

this.grid = 0: (10) [0, 1, 1, 1, 1, 1, 1, 1, 1, 1]
1: (10) [0, 1, 1, 1, 1, 1, 1, 1, 1, 1]
2: (10) [0, 1, 1, 1, 1, 1, 1, 1, 1, 1]
3: (10) [0, 1, 1, 1, 1, 1, 1, 1, 1, 1]
4: (10) [0, 1, 1, 1, 1, 1, 1, 1, 1, 1]
5: (10) [0, 1, 1, 1, 1, 1, 1, 1, 1, 1]
6: (10) [0, 1, 1, 1, 1, 1, 1, 1, 1, 1]
7: (10) [0, 1, 1, 1, 1, 1, 1, 1, 1, 1]
8: (10) [0, 1, 1, 1, 1, 1, 1, 1, 1, 1]
9: (10) [0, 1, 1, 1, 1, 1, 1, 1, 1, 1]

class Pane {
  turnChance = 0.4;
  maxLength = 100;
  gridMultiplier = 20;
  constructor({
    height,
    width,
    p,
    start
  } = {}) {
    this.height = height;
    this.width = width;
    this.start = start;
    this.grid;
    this.initGrid();
  }
  initGrid() {
    this.grid = Array(this.width).fill(Array(this.height).fill(1));
  }
  generateLines() {
    this.grid[0][0] = 0;
  }
}
const pane = new Pane({
  height: 10,
  width: 10,
  start: [0, 0]
});
console.log(pane.grid)
pane.generateLines()
console.log(pane.grid)

Why is this happening, and how can I set this.grid[0][0] solely, without it affecting any other elements in the array?

  • 1
    You are filling your array created with `Array(this.width)` with the same array at each index: `Array(this.height).fill(1)`. So each array index references the same array in memory. See [this](https://stackoverflow.com/a/49201210) answer for details – Nick Parsons Apr 25 '22 at 10:49

0 Answers0