@SvetlanaDubovik

Как сравнить значения соседних ячеек в таблице?

Здравствуйте. Есть таблица. Размер таблицы вводит пользователь. В таблице значения могут быть 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] сравнивается [11] и [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;
  };
  • Вопрос задан
  • 201 просмотр
Пригласить эксперта
Ответы на вопрос 1
@SvetlanaDubovik Автор вопроса
не зря говорят, правильно составленный вопрос - это уже половина решения. порой достаточно просто обозначить проблему, желательно письменно, и решение приходит само собой в течение пары минут. Сама решили эту абракадабру. Вместо domains.push(arr[i]); и еще 2х аналогичных местах достаточно сделать так domains.push([arr[i]]);.
Но за советы по оптимизации все равно буду благодарна
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы