# Блок: Фильтрация

<figure><img src="/files/ZuH29JWrHEndpMfhExEU" alt=""><figcaption></figcaption></figure>

Блок **"Фильтрация"** используется для отбора данных из исходного массива, которые соответствуют заданным условиям. Это позволяет сократить объем данных для дальнейшей обработки, выделяя только те элементы, которые удовлетворяют определённым критериям.

***

#### Основные параметры блока

1. **Название блока:**
   * Уникальное имя, которое идентифицирует задачу фильтрации в текущем сценарии, например: *"Фильтрация по локации"*.
2. **Исходный массив:**
   * Переменная, содержащая данные для фильтрации. Например: `carList` (список автомобилей).
3. **Массив назначения:**
   * Переменная, в которую будет сохранён результат фильтрации. Например: `carList2`.
4. **Условие для фильтрации:**
   * JavaScript-условие, определяющее логику отбора данных. Пример:

     <pre class="language-javascript" data-overflow="wrap"><code class="lang-javascript">javascript
     this.gptResult.locations?.find(location => this.contains(`${this.item.location}`, location))
     </code></pre>
   * Здесь происходит проверка, соответствует ли локация элемента исходного массива массиву локаций из результата предыдущего шага (`gptResult.locations`).

***

#### Пример использования

**Сценарий: Фильтрация автомобилей по локации**

1. **Исходные данные (массив `carList`):**

   ```json
   json
   [
       {"model": "Lada Vesta", "color": "Red", "location": "Moscow"},
       {"model": "Toyota Camry", "color": "White", "location": "Saint Petersburg"},
       {"model": "Hyundai Solaris", "color": "Black", "location": "Moscow"}
   ]
   ```
2. **Условие фильтрации:**
   * Проверяем, содержится ли `location` элемента массива в массиве локаций, полученном из предыдущего шага (`gptResult.locations`).
3. **Пример результата фильтрации (массив `carList2`):**

   ```json
   json
   [
       {"model": "Lada Vesta", "color": "Red", "location": "Moscow"},
       {"model": "Hyundai Solaris", "color": "Black", "location": "Moscow"}
   ]
   ```

***

#### Возможности блока

* **Гибкость настройки условий фильтрации:**\
  Позволяет использовать сложные JavaScript-выражения для отбора данных.
* **Динамическая фильтрация:**\
  Условия могут опираться на результаты работы предыдущих блоков, таких как ИИ Запрос.
* **Сохранение результата:**\
  Результаты фильтрации сохраняются в отдельный массив, что позволяет продолжать их обработку в других блоках.

### Пример варианта №1

<figure><img src="/files/JWA2Ea5qd76yTDC9kPug" alt=""><figcaption></figcaption></figure>

* #### Разбор примера условия фильтрации

  <pre class="language-javascript" data-overflow="wrap"><code class="lang-javascript">javascript
  this.gptResult.locations?.find(location => this.contains(`${this.item.location}`, location))
  </code></pre>

  ####

  * #### Пошаговое объяснение

    1. **`this.gptResult.locations`**
       * **Что это такое?**\
         Это массив локаций, который был получен на предыдущих этапах.\
         Пример:

         <pre class="language-javascript" data-overflow="wrap"><code class="lang-javascript">javascript
         this.gptResult.locations = ["Moscow", "Saint Petersburg", "Kazan"];
         </code></pre>

         * **`?.` (опциональная цепочка):**\
           Проверяет, существует ли объект `locations`. Если он отсутствует или равен `undefined`, выражение не вызывает ошибку, а просто возвращает `undefined`.
    2. **`.find(location => ...)`**
       * **Что это делает?**\
         Метод `find` ищет первый элемент в массиве `locations`, который удовлетворяет указанному условию.
       * **Пример работы:**

         ```javascript
         javascript
         ["Moscow", "Saint Petersburg", "Kazan"].find(location => location === "Moscow");
         // Вернёт "Moscow"
         ```
    3. **`this.contains(`${this.item.location}`, location)`**
       * **Что это такое?**\
         Проверка на соответствие текущей локации элемента (`this.item.location`) одному из значений в массиве `locations`.
       * **Аргументы:**
         * `${this.item.location}`: локация текущего элемента массива, который фильтруется. Например, `"Moscow"`.
         * `location`: текущий элемент массива `locations`, который проверяется методом `find`.
       * **Метод `this.contains`:**\
         Проверяет, содержит ли строка локации элемента (`this.item.location`) значение из массива `locations`.\
         Например:

         ```javascript
         javascript
         this.item.location = "Moscow Region";
         location = "Moscow";
         this.contains("Moscow Region", "Moscow"); // Вернёт true
         ```
    4. **Пример работы всего выражения:**

       **Исходные данные:**

       <pre class="language-javascript" data-overflow="wrap"><code class="lang-javascript">javascript
       this.gptResult.locations = ["Moscow", "Saint Petersburg", "Kazan"];
       this.item.location = "Moscow Region";
       </code></pre>

       **Проверка:**

       <pre class="language-javascript" data-overflow="wrap"><code class="lang-javascript">javascript
       this.contains("Moscow Region", "Moscow"); // Вернёт true
       </code></pre>

       **Результат:**

       Метод `find` вернёт `"Moscow"`, так как он удовлетворяет условию.

    ####

    * #### Итог работы выражения

      * **Если совпадение найдено:**\
        Условие фильтрации будет возвращать `true`, и элемент массива будет добавлен в массив назначения.
        * **Если совпадение не найдено:**\
          Условие фильтрации вернёт `false`, и элемент массива будет проигнорирован.

      ####
    * Пример в контексте

      **Исходные данные (`carList`):**

      ```javascript
      javascript
      [
        { model: "Lada Vesta", color: "Red", location: "Moscow Region" },
        { model: "Toyota Camry", color: "White", location: "Saint Petersburg" },
        { model: "Hyundai Solaris", color: "Black", location: "Kazan" }
      ]
      ```

      **Локации из `this.gptResult`:**

      <pre class="language-javascript" data-overflow="wrap"><code class="lang-javascript">javascriptК
      this.gptResult.locations = ["Moscow", "Kazan"];
      </code></pre>

      **Условие:**

      <pre class="language-javascript" data-overflow="wrap"><code class="lang-javascript">javascript
      this.gptResult.locations?.find(location => this.contains(`${this.item.location}`, location));
      </code></pre>

      **Результат фильтрации:**

      ```javascript
      javascript
      [
        { model: "Lada Vesta", color: "Red", location: "Moscow Region" },
        { model: "Hyundai Solaris", color: "Black", location: "Kazan" }
      ]
      ```

      В массив назначения попадут только те элементы, где `location` элемента соответствует значениям в массиве `this.gptResult.locations`.


---

# 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://docs.intellectdialog.com/integration.intellectdialog/blok-filtraciya.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.
