Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Перебор элементов для массива вокруг элемента (https://javascript.ru/forum/dom-window/71436-perebor-ehlementov-dlya-massiva-vokrug-ehlementa.html)

victornalchik 18.11.2017 15:42

Перебор элементов для массива вокруг элемента
 
Уважаемые форумцы, подскажите пожалуйста.
Имеется массив 9x9 стоящий из 0 и 1.
Для каждого элемента нужно просмотреть близлежащие вокруг него (т.е. он сам в центре, а вокруг 8 клеток)и если они равны 1 увеличить счетчик на 1.

При переборе если элемент в массиве не существует например (i=-1 и j =-1 для левой угловой клетки) выдается ошибка в консоль, поэтому в ручную обрабатываю угловые клетки и боковые. Вот пример работающего кода.

Имеются ли более изящные способы обработки клеток вокруг элемента?
if (i == 0 || j == 0 || i == row - 1 || j == column - 1) {
                            if (i == 0 || j == 0) {
                                if (i == 0 && j == 0) {
                                    array[i][j + 1] == 1 ? ++count : count;
                                    array[i + 1][j] == 1 ? ++count : count;
                                    array[i + 1][j + 1] == 1 ? ++count : count;
                                }
                                if (i == 0 && j != 0 && j != column - 1) {
                                    array[i][j - 1] == 1 ? ++count : count;
                                    array[i][j + 1] == 1 ? ++count : count;
                                    array[i + 1][j - 1] == 1 ? ++count : count;
                                    array[i + 1][j] == 1 ? ++count : count;
                                    array[i + 1][j + 1] == 1 ? ++count : count;
                                }
                                if (i != 0 && i != row - 1 && j == 0) {
                                    array[i - 1][j] == 1 ? ++count : count;
                                    array[i - 1][j + 1] == 1 ? ++count : count;
                                    array[i][j + 1] == 1 ? ++count : count;
                                    array[i + 1][j] == 1 ? ++count : count;
                                    array[i + 1][j + 1] == 1 ? ++count : count;
                                }
                            }
                            if (i == row - 1 || j == column - 1) {
                                if (i == 0 && j == column - 1) {
                                    array[i][j - 1] == 1 ? ++count : count;
                                    array[i + 1][j - 1] == 1 ? ++count : count;
                                    array[i + 1][j] == 1 ? ++count : count;
                                }
                                if (i == row - 1 && j == 0) {
                                    array[i - 1][j] == 1 ? ++count : count;
                                    array[i - 1][j + 1] == 1 ? ++count : count;
                                    array[i][j + 1] == 1 ? ++count : count;
                                }
                                if (i == row - 1 && j == column - 1) {
                                    array[i - 1][j - 1] == 1 ? ++count : count;
                                    array[i - 1][j] == 1 ? ++count : count;
                                    array[i][j - 1] == 1 ? ++count : count;
                                }
                                if (i != 0 && i != row - 1 && j == column - 1) {
                                    array[i - 1][j - 1] == 1 ? ++count : count;
                                    array[i - 1][j] == 1 ? ++count : count;
                                    array[i][j - 1] == 1 ? ++count : count;
                                    array[i + 1][j - 1] == 1 ? ++count : count;
                                    array[i + 1][j] == 1 ? ++count : count;
                                }
                                if (i == row - 1 && j != 0 && j != column - 1) {
                                    array[i - 1][j - 1] == 1 ? ++count : count;
                                    array[i - 1][j] == 1 ? ++count : count;
                                    array[i - 1][j + 1] == 1 ? ++count : count;
                                    array[i][j - 1] == 1 ? ++count : count;
                                    array[i][j + 1] == 1 ? ++count : count;
                                }
                            }
                            // console.log(count);

                        } else {
                            array[i - 1][j - 1] == 1 ? ++count : count;
                            array[i - 1][j] == 1 ? ++count : count;
                            array[i - 1][j + 1] == 1 ? ++count : count;
                            array[i][j - 1] == 1 ? ++count : count;
                            array[i][j + 1] == 1 ? ++count : count;
                            array[i + 1][j - 1] == 1 ? ++count : count;
                            array[i + 1][j] == 1 ? ++count : count;
                            array[i + 1][j + 1] == 1 ? ++count : count;
                            // console.log(count);


                        }

рони 18.11.2017 16:50

victornalchik,
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.

рони 18.11.2017 17:00

Цитата:

Сообщение от victornalchik
Имеются ли более изящные способы обработки клеток вокруг элемента?

function chec()
https://javascript.ru/forum/misc/673...tml#post444024


Часовой пояс GMT +3, время: 06:29.