Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top

Вебинар: Стратегия без иллюзий: как превращать цели в результаты - 19.08

menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

V7037. The nested loop counter is initialized with the outer loop counter.

05 Авг 2026

Анализатор обнаружил вложенный цикл for, счётчик которого инициализируется значением счётчика внешнего цикла. Такой код часто содержит ошибку: скорее всего, обход надо начинать со следующего элемента (i + 1).

Рассмотрим пример:

function hasDuplicates(arr) {
  for (let i = 0; i < arr.length; i++) {
    for (let j = i; j < arr.length; j++) {
      if (arr[i] === arr[j])
        return true;
    }
  }
  return false;
}

Функция должна проверять, есть ли в массиве повторяющиеся элементы. Однако вложенный цикл начинается с j = i, поэтому на первой же итерации элемент сравнивается сам с собой: выражение arr[i] === arr[i] всегда истинно, и функция вернёт true для любого непустого массива.

Исправленный вариант:

function hasDuplicates(arr) {
  for (let i = 0; i < arr.length; i++) {
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[i] === arr[j])
        return true;
    }
  }
  return false;
}

Анализатор также выдаст ошибку на следующий код:

function hasDuplicates(arr) {
  for (let i = 0; i < arr.length; i++) {
    for (let j = i; j < arr.length; j++) {
      if (i !== j && arr[i] === arr[j])
        return true;
    }
  }
  return false;
}

В нём проверка i !== j выполняется на каждой итерации, хотя отсеивает лишь одну. В этом случае дополнительная итерация является избыточной, так как ветвление усложняет оптимизацию цикла компилятором.

Диагностическое правило классифицируется как: