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

Цикл `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}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://aleksandra-hrevtsova.gitbook.io/senior-front-end-javascript/massivy/perebor-massiva.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
