allowed_amount = len(arr) - len(banned); random = getRandomInt(0, allowed_amount - 1); //-1 потому что мы с нуля генерируем получается bannedBefore = banned.findIndex(i => i.index > random); //ищем сколько запрещённых до выбранного рандомно let j = random; let i = bannedBefore; while (i > 0){ //идём вперед по arr на количество валидных равное количеству запрещённых до рандома j++; if (arr[j].valid){ i--; } } return j;