Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Добавляет доку про метод множеств isDisjointFrom() #5672

Open
wants to merge 11 commits into
base: main
Choose a base branch
from
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
60 changes: 60 additions & 0 deletions js/set-is-disjoint-from/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
---
title: "`isDisjointFrom()`"
description: "Метод проверки, имеют ли множества общие элементы."
baseline:
- group: set-methods
features:
- javascript.builtins.Set.isDisjointFrom
authors:
- punkmachine
related:
- js/set
- js/set-has
- js/set-foreach
tags:
- doka
---

## Кратко

Метод `isDisjointFrom()` позволяет проверить, имеют ли два множества хотя бы один общий элемент. Возвращает `true`, если множества не имеют общих элементов, и `false`, если хотя бы один элемент совпадает.

Метод можно выразить следующей математической формулой:

```
A ∩ B = ∅
```

![Два не пересекающихся множества A и B](images/set-disjoint-from.png)

## Пример

У нас есть два набора навыков разных разработчиков, представленных в виде массивов строк. Им стало интересно, есть ли у них хотя бы один общий навык, для чего они могут использовать метод `isDisjointFrom()`:
punkmachine marked this conversation as resolved.
Show resolved Hide resolved

```js
const frontendSkills = new Set(['JavaScript', 'HTML', 'CSS', 'Vue.js']);
const backendSkills = new Set(['Python', 'Node.js', 'PostgreSQL', 'Redis']);

console.log(frontendSkills.isDisjointFrom(backendSkills));
// true, т.к. ни один из навыков не пересекается
```

Как выяснилось, у них нет пересечений в навыках, но выяснилось, что frontend-разработчик забыл указать, что он также умеет писать код на `Node.js`.
punkmachine marked this conversation as resolved.
Show resolved Hide resolved

```js
// Добавим навык в существующее множество.
frontendSkills.add('Node.js');

console.log(frontendSkills.isDisjointFrom(backendSkills));
// false, т.к. Node.js уже есть в обоих множествах
```

## Как пишется

Метод `isDisjointFrom()` принимает один обязательный аргумент — объект, который содержит множество для сравнения. Если аргумент не указан, будет брошено исключение `TypeError: Set.prototype.isDisjointFrom argument must be an object`.

Аргументом для метода `isDisjointFrom()` может быть множество, созданное через [конструктор `new Set()`](/js/set-constructor/), а также [`Map`](/js/map/).

Copy link
Contributor

@vitya-ne vitya-ne Jan 29, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

множество, созданное через конструктор new Set()

Стоит также не забывать про set-like объекты.

Я бы предложил использовать тут блок используемый в других методах, например: https://doka.guide/js/set-is-superset-of/#kak-pishetsya

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я вот тут могу ошибаться, но кажется кроме Map и Set как раз таки и нет таковых объектов в JS.
Просто если я прав, тогда не особо вижу смысла указывать про set-like объекты.

Copy link
Contributor

@vitya-ne vitya-ne Jan 30, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

кроме Map и Set как раз таки и нет таковых объектов в JS.

Есть и даже перечислены:
image

То чего нет, можно же создать. А это и не так сложно:
image

Просто если я прав, тогда не особо вижу смысла указывать про set-like объекты.

Если бы ты был тут прав, то и понятия "set-like объекты" не существовало.

Текущая редакция:
"множество, созданное через конструктор new Set()"
звучит примерно как "коллекция созданная через конструктор new Array()". Кажется это назвается ни как иначе как массив ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Хм, был не прав, спасибо <3. Вечером закину в статью.

## Как понять

Метод `isDisjointFrom()` помогает проверить два множества на наличие хотя бы одного совпадающего элемента без прохода по ним с помощью [`forEach()`](/js/set-foreach/).
Loading