> For the complete documentation index, see [llms.txt](https://docs.intellectdialog.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.intellectdialog.com/integration.intellectdialog/blok-filtraciya.md).

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

<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`.
