Вы очень близки к правильному ответу.Функция _.differenceWith
из lodash имеет три аргумента: проверяемый массив, исключаемые значения и третий аргумент - компаратор, который определяет, какие значения вам нужны.В вашем случае, использование _.isEqual
ищет точно такой же объект (что, насколько я понял, не является вашим желаемым поведением).
Если вам нужно только иметь одинаковые значения x
и y
попробуйте использовать свой собственный компаратор вместо функции _.isEqual
из lodash.
Это будет выглядеть примерно так:
const arr1 = [{ x: 1, y: 2, z:3 }, { x: 2, y: 1, z:4 }];
const arr2 = [{ x: 1, y: 2, a:5 }, { x: 2, y: 3, a:4 }];
// this is your custom comparator which is called with each value from the two arrays
// I gave descriptive names to the arguments so that it is more clear
const customComparator = (valueFromFirstArray, valueFromSecondArray) =>
valueFromFirstArray.x === valueFromSecondArray.x
&& valueFromFirstArray.y === valueFromSecondArray.y;
const result = _.differenceWith(arr1, arr2, customComparator);
console.log(result);
// will print [{x: 2, y: 1, z: 4}]
Или, если вы не знакомы с функциями стрелок, пользовательскиеКомпаратор может быть объявлен так:
function customComparator(valueFromFirstArray, valueFromSecondArray) {
return valueFromFirstArray.x === valueFromSecondArray.x
&& valueFromFirstArray.y === valueFromSecondArray.y
}
Вот скрипка , где вы можете пообщаться с пользовательским компаратором, если хотите.