set.has()

Метод проверяет наличие значения в коллекции Set

Время чтения: меньше 5 мин

Кратко

Секция статьи "Кратко"

Метод has проверяет, содержится ли значение в коллекции Set. Если значение есть в коллекции, метод вернёт true, в противном случае — false.

Пример

Секция статьи "Пример"
        
          
          const watchList = new Set(['Сияние', 'Интерстеллар', 'Казино'])console.log(watchList.has('Казино'))// trueconsole.log(watchList.has('Чёрная пантера'))// false
          const watchList = new Set(['Сияние', 'Интерстеллар', 'Казино'])

console.log(watchList.has('Казино'))
// true

console.log(watchList.has('Чёрная пантера'))
// false

        
        
          
        
      

Как пишется

Секция статьи "Как пишется"

Метод принимает один аргумент — значение, которое нужно проверить.

Возвращает булево значение:

  • true если коллекция содержит искомое значение;
  • false если значения в коллекции нет.

На практике

Секция статьи "На практике"

Николай Лопин

Секция статьи "Николай Лопин"

🛠 Нужно быть осторожным при работе с объектами. Объекты хранятся и сравниваются по ссылке, поэтому результат такого кода может удивить:

        
          
          const users = new Set([  {name: 'Иван', lastName: 'Петров'},  {name: 'Пётр', lastName: 'Иванов'}])console.log(users.has({name: 'Иван', lastName: 'Петров'}))// false 🤷‍♂️
          const users = new Set([
  {name: 'Иван', lastName: 'Петров'},
  {name: 'Пётр', lastName: 'Иванов'}
])

console.log(users.has({name: 'Иван', lastName: 'Петров'}))
// false 🤷‍♂️

        
        
          
        
      

Дело в том, что два Ивана Петрова на самом деле разные Иваны Петровы. Это легко заметить, если обратить внимание на фигурные скобки. Каждая пара фигурных скобок создаёт новый независимый объект, хотя они и выглядят одинаково.

Если сравнить их между собой, то результат сравнения тоже будет false:

        
          
          console.log({name: 'Иван', lastName: 'Петров'} === {name: 'Иван', lastName: 'Петров'})// false
          console.log({name: 'Иван', lastName: 'Петров'} === {name: 'Иван', lastName: 'Петров'})
// false

        
        
          
        
      

Проверка сработает корректно, если мы будем искать тот же объект:

        
          
          const petrov = {name: 'Иван', lastName: 'Петров'}const ivanov = {name: 'Пётр', lastName: 'Иванов'}const users = new Set([petrov, ivanov])console.log(users.has(petrov))// true
          const petrov = {name: 'Иван', lastName: 'Петров'}
const ivanov = {name: 'Пётр', lastName: 'Иванов'}
const users = new Set([petrov, ivanov])

console.log(users.has(petrov))
// true

        
        
          
        
      

🛠 Если вам нужно добавить значение в Set, то можно не проверять, есть ли уже значение в коллекции. Вызывайте add. Если элемент уже есть в коллекции, то добавление будет проигнорировано. Аналогично с delete.