Клавиша / esc

.difference()

Метод для сравнения двух коллекций, который возвращает новую коллекцию с элементами только из первой.

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

Кратко

Скопировано

Метод difference() сравнивает текущую коллекцию с другой и возвращает новую, состоящую из элементов, входящих только в первую коллекцию.

В математике это называется разность двух множеств и описывается так: разность множеств A и B – это множество, в которое входят все элементы множества A, не входящие в множество B.

Это можно выразить формулой:

A \ B = { x ∈ A | x ∉ B }
Разность двух множеств

Пример

Скопировано

Допустим, у нас есть два списка имён в виде коллекций строк. Необходимо сравнить эти коллекции и получить список имён, встречающихся только в первой коллекции:

        
          
          const names1 = new Set(['Аглая', 'Настасья', 'Елизавета', 'Соня'])const names2 = new Set(['Лев', 'Родион', 'Настасья'])const diff = names1.difference(names2)console.log(diff)// Set(3) { 'Аглая', 'Елизавета', 'Соня' }
          const names1 = new Set(['Аглая', 'Настасья', 'Елизавета', 'Соня'])
const names2 = new Set(['Лев', 'Родион', 'Настасья'])

const diff = names1.difference(names2)

console.log(diff)
// Set(3) { 'Аглая', 'Елизавета', 'Соня' }

        
        
          
        
      

Как пишется

Скопировано

Метод difference() принимает один обязательный аргумент — объект, содержащий коллекцию для вычисления разности. Если аргумент не указан, будет брошено исключение TypeError.

Аргументом может быть как Set-объект, так и Set-подобный объект, например, Map.

Метод difference() возвращает новый Set-объект, содержащий разность исходной и указанной коллекций. Порядок элементов будет соответствовать порядку элементов в исходной коллекции.

Как понять

Скопировано

В случае использования коллекций часто требуется выполнять над ними операции как с математическими множествами. Одна из распространённых операций над множествами — разность двух множеств.

Метод difference() сравнивает и получает разность двух коллекций без необходимости писать дополнительный код обхода коллекций.

Поддержка метода difference() в основных браузерах и в Node.js появилась в 2024 году. Например, если попробовать использовать difference() в Node.js ниже версии v.22.0.0, это приведёт к ошибке:

        
          
          const painters = new Set(['Леонардо','Микеланджело','Рафаэль'])const turtles = new Set(['Донателло','Рафаэль'])try {  console.log(painters.difference(turtles))} catch (err) {  console.error('Поймали ошибку! Вот она: ', err.message)}// Поймали ошибку! Вот она: painters.difference is not a function
          const painters = new Set(['Леонардо','Микеланджело','Рафаэль'])
const turtles = new Set(['Донателло','Рафаэль'])
try {
  console.log(painters.difference(turtles))
} catch (err) {
  console.error('Поймали ошибку! Вот она: ', err.message)
}
// Поймали ошибку! Вот она: painters.difference is not a function

        
        
          
        
      
Поддержка в браузерах:
  • Chrome 122, поддерживается
  • Edge 122, поддерживается
  • Firefox 127, поддерживается
  • Safari 17, поддерживается
О Baseline