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
)
);