Заменить часть многомерного массива

195
24 мая 2018, 22:30

Дано массив, нужно заменить окруженные значения пример на картинке:

все значения ниже красной линии должны быть 6, все что имеет контакт через соседние позиции с верхом должно остаться не тронутым. Прошу хотя бы пнуть в какую сторону смотреть, даже примерно не могу сообразить как такое реализовать.

var arrayGrid = [ 
    [5, 2, 3, 0, 2, 0, 3, 5, 3, 5], 
    [4, 3, 3, 4, 4, 0, 2, 0, 2, 0], 
    [2, 3, 5, 3, 1, 1, 4, 5, 4, 2], 
    [2, 1, 3, 0, 1, 1, 2, 2, 1, 5], 
    [3, 4, 3, 4, 1, 4, 2, 6, 2, 2], 
    [5, 3, 1, 0, 5, 2, 6, 2, 1, 0], 
    [0, 0, 6, 6, 3, 6, 6, 6, 6, 1], 
    [6, 6, 6, 6, 6, 6, 6, 4, 2, 3], 
    [6, 3, 6, 6, 6, 6, 3, 4, 3, 4], 
    [6, 6, 6, 6, 6, 6, 6, 5, 2, 6], 
    [6, 6, 6, 6, 6, 6, 1, 6, 6, 2], 
    [6, 6, 6, 6, 6, 6, 6, 6, 6, 6], 
    [6, 6, 6, 6, 6, 6, 6, 6, 6, 6], 
    [6, 6, 6, 6, 6, 6, 6, 6, 6, 6] 
] 
 
var line = [] 
 
 
function findClear(y, x) { 
    if (x >= 10) { 
        return line; 
    } 
    if (arrayGrid[y - 1][x + 1] == 6) { 
        line.push(y - 1) 
        findClear(y - 1, x + 1) 
    } else if (arrayGrid[y][x + 1] == 6) { 
        line.push(y) 
        findClear(y, x + 1) 
    } else if (arrayGrid[y + 1][x + 1] == 6) { 
        line.push(y + 1) 
        findClear(y + 1, x + 1) 
    } 
 
} 
 
findClear(7, 0) 
console.log(line) 
if(line.length < 10){ 
    line = []; 
    findClearOpposite(9, 10) 
} 
function findClearOpposite(y, x) { 
    if (x < 0) { 
        return line; 
    } 
    if (arrayGrid[y - 1][x - 1] == 6) { 
        line.push(y - 1) 
        findClearOpposite(y - 1, x - 1) 
    } else if (arrayGrid[y][x - 1] == 6) { 
        line.push(y) 
        findClearOpposite(y, x - 1) 
    } else if (arrayGrid[y + 1][x - 1] == 6) { 
        line.push(y + 1) 
        findClearOpposite(y + 1, x - 1) 
    } 
 
} 
console.log(line)

Задача решена простым способом если не получилось слева направо, то пробуем справа налево. Большое спасибо за идеи и советы.

Answer 1

Ловите решение:

var array =
    [
        [5, 2, 3, 0, 2, 0, 3, 5, 3, 5],
        [4, 3, 3, 4, 4, 0, 2, 0, 2, 0],
        [2, 3, 5, 3, 1, 1, 4, 5, 4, 2],
        [2, 1, 3, 0, 1, 1, 2, 2, 1, 5],
        [3, 4, 3, 4, 1, 4, 2, 6, 2, 2],
        [5, 3, 1, 0, 5, 2, 6, 2, 1, 0],
        [0, 0, 6, 6, 3, 6, 6, 6, 6, 1],
        [6, 6, 6, 6, 6, 6, 6, 4, 2, 3],
        [6, 3, 6, 6, 6, 6, 3, 4, 3, 4],
        [6, 6, 6, 6, 6, 6, 6, 5, 2, 6],
        [6, 6, 6, 6, 6, 6, 1, 6, 6, 2],
        [6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
        [6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
        [6, 6, 6, 6, 6, 6, 6, 6, 6, 6]
    ],
    line = [7,7,6,6,7,8,9,10,10,9];
for(var y = 0; y < array.length; y++)
{
    for(var x = 0; x < array[y].length; x++)
    {
        if(y > line[x])
            array[y][x] = 6
    }
}
console.log(array);

Добавлено спустя 12 часов:

Поскольку мне из нижеследующего общения стали известны ваши намерения и название игры, то полный код вашей игры на чистом JavaScript с подробным объяснением вы найдёте по ссылкам:

  1. Код вашей игры на чистом JavaScript с подробным объяснением

  2. Код вашей игры «Bubble-Shooter-HTML5» на Github

READ ALSO
Разбить 3 объекта в строку

Разбить 3 объекта в строку

У меня есть переменная attachmentsВ ней 3 объекта:

221
Отображение нового компонента в render

Отображение нового компонента в render

Есть alertОн отображается когда значение переменной в store равно true

164
Запись массива в Local Storage

Запись массива в Local Storage

у меня есть html таблица, из двух колонок, необходимо по нажатию на кнопку записывать данные со второго столбца в local storageпри проверке инспектором...

229
Собрать значения и вернуть .map() или .each()

Собрать значения и вернуть .map() или .each()

Подскажите, что-то никак не соображу: есть верстка из 4 элементов, в котором есть в поле div число (наценка)Нужно собрать эти числа, к каждому...

202