# Перебор массива

Цикл `for` можно использовать для итерации по массиву, то есть «перебрать» его поэлементно.

```
const clients = ["Mango", "Ajax", "Poly"];

for (let i = 0; i < clients.length; i += 1) {  
    console.log(clients[i]);
}
```

Для доступа к элементам используется синтаксис квадратных скобок `массив[индекс]`, где `индекс` это значение счётчика цикла от `0` и до последнего индекса массива, то есть меньше, но не равно его длине.

### Цикл `for...of`[​](https://goit.global/textbooks/javascript-yk5evp/v2/docs/lesson-03/iteration#%D1%86%D0%B8%D0%BA%D0%BB-forof) <a href="#cikl-forof" id="cikl-forof"></a>

Конструкция `for...of` объявляет цикл, перебирающий итерируемые объекты, такие как массивы и строки. Тело цикла будет выполняться для значения каждого элемента. Это хорошая замена циклу `for` если не нужен доступ к счётчику итерации.

```
for (const variable of iterable) {  
    // тело цикла
}
```

Скопировать

* `variable` — переменная которая будет хранить значение элемента на каждой итерации.
* `inerrable` — коллекция, которая имеет перечислимые элементы, например массив.

```
const clients = ["Mango", "Ajax", "Poly"];

for (const client of clients) {  
    console.log(client);
}

const string = "javascript";

for (const character of string) {  
    console.log(character);
}
```

### Операторы `break` и `continue`[​](https://goit.global/textbooks/javascript-yk5evp/v2/docs/lesson-03/iteration#%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D1%8B-break-%D0%B8-continue) <a href="#operatory-break-i-continue" id="operatory-break-i-continue"></a>

Будем искать имя клиента в массиве имен, если нашли - прервем цикл, так как нет смысла искать дальше, имена у нас уникальные.

```
const clients = ["Mango", "Poly", "Ajax"];

const clientNameToFind = "Poly";

let message;

for (const client of clients) {  
// На каждой итерации будем проверять совпадает ли элемент массива с  
// именем клиента. Если совпадает то мы записываем в message сообщение  
// об успехе и делаем break чтобы не искать дальше  

if (client === clientNameToFind) {    
    message = "Клиент с таким именем есть в базе данных!";   
    break;  
}  

// Если они не совпадают то запишем в message сообщение об отсутствии имени 
    message = "Клиента с таким именем нету в базе данных!";
}
console.log(message); // "Клиент с таким именем есть в базе данных!"
```

Можно изначально задать `message` значение неудачи поиска, а в цикле перезаписать его на успех, если нашли имя. Но `break` все равно пригодится, так как если у нас массив из 10000 клиентов, а нужный нам стоит на позиции 2, то нет абсолютно никакого смысла перебирать оставшиеся 9998 элементов.

```
const clients = ["Mango", "Poly", "Ajax"];
const clientNameToFind = "Poly";
let message = "Клиента с таким именем нету в базе данных!";

for (const client of clients) {  
    if (client === clientNameToFind) {    
    message = "Клиент с таким именем есть в базе данных!";    
    break;  
    }  
// Если не совпадает, то на этой итерации ничего не делаем
}

console.log(message); // Клиент с таким именем есть в базе данных!
```

Используем цикл для вывода только чисел больше определенного значения.

```
const numbers = [1, 3, 14, 18, 4, 7, 29, 6, 34];
const threshold = 15;
// Для чисел меньше чем порог срабатывает continue, выполнение тела прекращается
// и управление передаётся на следующую итерацию.

for (let i = 0; i < numbers.length; i += 1) {  
    if (numbers[i] < threshold) {    
    continue;  
}  

console.log(`Число больше чем ${threshold}: ${numbers[i]}`); // 18, 29, 34}
```
