41 lines
1.0 KiB
JavaScript
41 lines
1.0 KiB
JavaScript
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = fastObjectShallowCompare;
|
|
// From mui-x: https://github.com/mui/mui-x/blob/bb92fb0adac6764461adea9a9d7d43f1095f49e5/packages/x-internals/src/fastObjectShallowCompare/fastObjectShallowCompare.ts
|
|
/* eslint-disable guard-for-in */
|
|
|
|
const is = Object.is;
|
|
|
|
/**
|
|
* Fast shallow compare for plain objects.
|
|
* Returns `true` when both objects have the same own enumerable keys and each value is equal
|
|
* according to `Object.is()`.
|
|
*/
|
|
function fastObjectShallowCompare(a, b) {
|
|
if (a === b) {
|
|
return true;
|
|
}
|
|
if (!(a instanceof Object) || !(b instanceof Object)) {
|
|
return false;
|
|
}
|
|
let aLength = 0;
|
|
let bLength = 0;
|
|
for (const key in a) {
|
|
aLength += 1;
|
|
if (!is(a[key], b[key])) {
|
|
return false;
|
|
}
|
|
if (!(key in b)) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// eslint-disable-next-line @typescript-eslint/naming-convention, @typescript-eslint/no-unused-vars
|
|
for (const _ in b) {
|
|
bLength += 1;
|
|
}
|
|
return aLength === bLength;
|
|
} |