Не могу понять описание метода differenceBy в документации

В документации lodash есть описание метода differenceBy

Этот метод похож на _.difference за исключением того, что он принимает итерацию, которая вызывается для каждого элемента массива и значений для генерации критерия, по которому они сравниваются. Порядок и ссылки на результирующие значения определяются первым массивом. Итератор вызывается с одним аргументом

Не могу понять, что здесь имеется в виду, не могли бы объяснить подробнее?


Ответы (1 шт):

Автор решения: Василиса

Нашла, это про differenceBy в лодаше. Имеется в виду, что этот метод принимает ещё третий аргумент, функцию, которая будет вызвана на каждый элемент перед их сравнением.

Давайте возьмём пример из документации:

_.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);
// => [1.2]

Функция Math.floor будет вызвана на каждый элемент, прежде чем их сравнить. Поэтому 2.1 не попадет в результат, ведь Math.floor(2.1) === Math.floor(2.3)

Во втором примере показан короткий способ записи, когда мы работаем с объектами и надо взять значение по ключу. То есть

_.differenceBy([{ x: 2 }, { x: 1 }], [{ x: 1 }], 'x')

это то же самое, что _.property('x') или

_.differenceBy([{ x: 2 }, { x: 1 }], [{ x: 1 }], item => item['x'])

то есть, мы берём каждый элемент массива и применяем к нему лодашевскую функцию property, которая берёт значение из объекта по указанному пути. Путь - это один или несколько ключей, записанные в виде строки. Как она работает

_.property('x')({ x: 2 })
// => 2

Соответственно для { x: 1 } из обоих массивов она вернёт 1 и этот элемент будет исключен из результата differenceBy

→ Ссылка