Здравствуйте. Есть таблица. Размер таблицы вводит пользователь. В таблице значения могут быть 0 или 1. Примерно так
1 0 0 0 1 1 1
0 0 0 0 0 0 0
1 0 1 1 0 0 0
Нужно показать, на каких местах стоят "1". Если встречается 2 и более единички по горизонтали или по вертикали, то их нужно объединить в 1 массив. Предположим, что нумерация строк идет от 1 до 3, нумерация столбцов от 1 до 7. Т.огда в данном примере, программа должна нам выдать [11], [15, 16, 17], [31], [33,34]. И что-то никак не могу добиться корректной работы. На данный момент мой код такую последовательность обработает правильно, но вот если "1"ки будут раположены на местах [11], [13], [15], то не работает. Даже знаю, в чем ошибка, но вот как ее решить не пойму. Все множу и множу проверки, уже самой сложно распутывать этот клубок. А ошибка в строчке, помеченной (!!!). В данном месте у меня получается у элементов [11], [13] сравнивается [1
1] и [
13]. Еще одну проверку делать? Или может кто-нибудь подскажет, как оптимизировать этот хаос(((
let checkCellDomains = function (arr) {
let length = arr.length;
let domains = [];
for(let i = 0; i < length; i++) {
if (i + 1 < length) {
if ((arr[i+1].slice(1) - arr[i].slice(1) === 1) || (arr[i+1].slice(2) - arr[i].slice(2) === 10)) {
var commonArr = [];
commonArr.push(arr[i]);
commonArr.push(arr[i+1]);
domains.push(commonArr);
} else {
if (!commonArr) {
domains.push(arr[i]);
} else {
if (commonArr.indexOf(arr[i]) === -1) {
domains.push(arr[i]);
}
}
}
} else {
if (!commonArr) {
domains.push(arr[length-1]);
} else {
if (commonArr.indexOf(arr[length-1]) === -1) {
domains.push(arr[length-1]);
}
}
}
}
let i = 0;
while(i < domains.length) {
if (i + 1 < domains.length) {
if(domains[i+1][0] === domains[i][domains[i].length-1]) { (!!!)
domains[i].push(domains[i+1][1]);
domains.splice([i+1], 1);
} else {
i++;
}
} else {
break;
}
}
return domains;
};