@lena_tihonova_bl

Как систематизировать цикл for?

В функции есть конструкция switch, проверяющая n букв в двух строках на одинаковых позициях на соответствие:
switch (number) {
        case 3:
            for (let i = 0; i < one.length; i += 3) {
                if (one[i] == two[i] && one[i + 1] == two[i + 1] && one[i + 2] == two[i + 2]) {
                    result += one[i] + one[i + 1] + one[i + 2] + " ";
                }
            }
            
            break;
        case 4:
            for (let i = 0; i < one.length; i += 4) {
                if (one[i] == two[i] && one[i + 1] == two[i + 1] && one[i + 2] == two[i + 2] && one[i + 3] == two[i + 3]) {
                    result += one[i] + one[i + 1] + one[i + 2] + one[i + 3] + " ";
                }
            }
            
            break;
        case 5:
            for (let i = 0; i < one.length; i += 5) {
                if (one[i] == two[i] && one[i + 1] == two[i + 1] && one[i + 2] == two[i + 2] && one[i + 3] == two[i + 3] && one[i + 4] == two[i + 4]) {
                    result += one[i] + one[i + 1] + one[i + 2] + one[i + 3] + one[i + 4] + " ";
                }
            }
            
            break;
        case 6:
            for (let i = 0; i < one.length; i += 5) {
                if (one[i] == two[i] && one[i + 1] == two[i + 1] && one[i + 2] == two[i + 2] && one[i + 3] == two[i + 3] && one[i + 4] == two[i + 4]) {
                    result += one[i] + one[i + 1] + one[i + 2] + one[i + 3] + one[i + 4] + " ";
                }
            }
            
            break;
    }


Дело в том, что таких n может быть и 30 штук, и по-любому можно как-то обойтись без 30 проверок, но я не знаю, как. Помогите, пожалуйста.
  • Вопрос задан
  • 113 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Вот решение вашей исходной задачи:
const commonParts = (str1, str2, size) => {
  const re = new RegExp(`.{1,${size}}`, 'g');
  const arr1 = str1.match(re);
  const arr2 = str2.match(re);
  return arr1.filter((e, i) => arr2[i] === e);
}
commonParts('1342567', '1242566', 2); // [ "42", "56" ]
commonParts('1342567', '1242566', 3); // [ "256" ]
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Adamos
@Adamos
// в switch: определяем n, и только.
for(let i = 0; i < one.length; i += n) {
  let eq = true;
  for(let pos = 0; pos < n; ++pos) {
    if(one[i + pos] != two[i + pos]) {
      eq = false;
      break;
    }
    if(eq) {
      // ну, и тут по аналогии
    }
  }
}

P.S. И да, у меня тоже есть подозрение, что выполнение этого кода натворит именно ту лютую дичь, которую он реализует, а задачу нужно было решать иначе ;)
Ответ написан
Комментировать
IonDen
@IonDen
JavaScript developer. IonDen.com
function foo(number) {
  for (let i = 0; i < bar; i += number) {
    ...
  }
}

foo(number) // вызываем сколько нужно раз
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы