跳到主要内容

differenceWith

2024年06月17日
柏拉文
越努力,越幸运

一、认识


这个方法类似_.difference ,除了它接受一个 comparator (注:比较器),它调用比较array,values中的元素。 结果值是从第一数组中选择。comparator 调用参数有两个:(arrVal, othVal)。

二、语法


三、实现


function differenceWith(array, ...values) {
const otherArray = values.slice(0, values.length - 1);
const comparator = values[values.length - 1];
const otherArrayMerge = otherArray.reduce((prev, curr) => {
return prev.concat(curr);
}, []);
return array.filter((item) => {
for (let i = 0; i < otherArrayMerge.length; i++) {
if (comparator(otherArrayMerge[i], item)) {
return false;
}
}
return true;
});
}

function isObject(value) {
return typeof value === "object" && value !== null;
}

function isEqual(value, other) {
if (!isObject(value) || !isObject(other)) {
return value === other;
}
const valueKeys = Object.keys(value);
const otherKeys = Object.keys(other);
if (valueKeys.length !== otherKeys.length) {
return false;
}
for (let key in value) {
if (!isEqual(value[key], other[key])) {
return false;
}
}
return true;
}

console.log(
differenceWith(
[
{ x: 1, y: 2 },
{ x: 2, y: 1 },
],
[{ x: 1, y: 2 }],
isEqual
)
);