Проебразования массива

Всем привет,
У меня есть вот такой вот массив.

[
 [1, 1, 1, 0, 0, 0, 0, 0, 0]
 [0, 0, 1, 1, 2, 1, 1, 0, 0]
 [0, 0, 1, 1, 2, 1, 1, 1, 1]
 [0, 0, 1, 1, 3, 2, 2, 1, 0]
 [0, 0, 0, 0, 1, 1, 1, 1, 1]
 [1, 1, 0, 0, 1, 1, 1, 0, 0]
 [1, 2, 0, 0, 0, 0, 1, 2, 2]
 [1, 2, 0, 0, 0, 0, 1, 1, 1]
]

Как сделать так что-бы, например при нажатие на позицию [0][4] все ячейки где 0 преоброзовались в "show", с условием что они ограничены числами которые не ровны 0.
Вот таким образом

[
 [1, 1, 1, 'show', 'show', 'show', 'show', 'show', 'show']
 [0, 0, 1, 1, 2, 1, 1, 'show', 'show']
 [0, 0, 1, 1, 2, 1, 1, 1, 1]
 [0, 0, 1, 1, 3, 2, 2, 1, 0]
 [0, 0, 0, 0, 1, 1, 1, 1, 1]
 [1, 1, 0, 0, 1, 1, 1, 0, 0]
 [1, 2, 0, 0, 0, 0, 1, 2, 2]
 [1, 2, 0, 0, 0, 0, 1, 1, 1]
]

Ответы (1 шт):

Автор решения: Sergey Glazirin

const gameMap = [
  [1, 1, 1, 0, 0, 0, 0, 0, 0],
  [0, 0, 1, 1, 2, 1, 1, 0, 0],
  [0, 0, 1, 1, 2, 1, 1, 1, 1],
  [0, 0, 1, 1, 3, 2, 2, 1, 0],
  [0, 0, 0, 0, 1, 1, 1, 1, 1],
  [1, 1, 0, 0, 1, 1, 1, 0, 0],
  [1, 2, 0, 0, 0, 0, 1, 2, 2],
  [1, 2, 0, 0, 0, 0, 1, 1, 1],
];

function open(x, y) {
  if (x === gameMap.length || y === gameMap[0].length || y === -1 || x === -1 || gameMap[x][y] === 'show') {
    return;
  }

  if (gameMap[x][y] === 0) {
    gameMap[x][y] = 'show';

    const neiborhood = [{
        a: x,
        b: y + 1
      },
      {
        a: x + 1,
        b: y
      },
      {
        a: x,
        b: y - 1
      },
      {
        a: x - 1,
        b: y
      }
    ];

    neiborhood.forEach((item) => {
      open(item.a, item.b)
    })
  } else {
    alert('You loose!');
  }
}

open(0, 4);
console.log(gameMap);

→ Ссылка