Вы можете получить массив смещений для получения правильных индексов и проверить, является ли значение звездочкой.
const
getCount = (array, x, y) => offsets
.reduce((c, [i, j]) => c + (array[x + i]?.[y + j] === '*'), 0),
offsets = [[-1, -1], [-1, 0], [-1, 1], [0, -1], [0, 1], [1, -1], [1, 0], [1, 1]],
input = [[0, 0, '*'], ['*', 0, 0], [0, '*', 0]],
result = input.map((row, i, a) => row.map((v, j) => v || getCount(a, i, j)));
result.forEach(a => console.log(a.join(' ')));