我认为您需要两个聚合级别:
const isObject = value => typeof value === 'object' && value !== null;
const compareObjects = (A,B) => {
const keysA = Object.keys(A);
const keysB = Object.keys(B);
if (keysA.length !== keysB.length) {
return false;
}
return !keysA.some(key => !B.hasOwnProperty(key) || A[key] !== B[key]);
};
const shallowEqual = (A,B) => {
if (A === B) {
return true;
}
if ([A,B].every(Number.isNaN)) {
return true;
}
if (![A,B].every(isObject)) {
return false;
}
return compareObjects(A,B);
};
const a = { field: 1 };
const b = { field: 2 };
const c = { field: { field: 1 } };
const d = { field: { field: 1 } };
console.log(shallowEqual(1,1)); // true
console.log(shallowEqual(1,2)); // false
console.log(shallowEqual(null,null)); // true
console.log(shallowEqual(NaN,NaN)); // true
console.log(shallowEqual([],[])); // true
console.log(shallowEqual([1],[2])); // false
console.log(shallowEqual({},{})); // true
console.log(shallowEqual({},a)); // false
console.log(shallowEqual(a,b)); // false
console.log(shallowEqual(a,c)); // false
console.log(shallowEqual(c,d)); // false
本文链接:https://www.f2er.com/3150876.html