@monstermann/fn
Version:
A utility library for TypeScript.
33 lines (31 loc) • 926 B
JavaScript
import { dfdlT } from "@monstermann/dfdl";
//#region src/object/isShallowEqual.ts
/**
* `isShallowEqual(target, source)`
*
* Performs a shallow equality comparison between `target` and `source` objects.
*
* ```ts
* isShallowEqual({ a: 1, b: 2 }, { a: 1, b: 2 }); // true
* isShallowEqual({ a: 1, b: 2 }, { a: 1, b: 3 }); // false
* ```
*
* ```ts
* pipe({ a: 1, b: 2 }, isShallowEqual({ a: 1, b: 2 })); // true
* pipe({ a: 1, b: 2 }, isShallowEqual({ a: 1, b: 3 })); // false
* ```
*/
const isShallowEqual = dfdlT((a, b) => {
if (a === b || Object.is(a, b)) return true;
const keys = Object.keys(a);
if (keys.length !== Object.keys(b).length) return false;
for (const key of keys) {
if (!Object.hasOwn(b, key)) return false;
const { [key]: valueA } = a;
const { [key]: valueB } = b;
if (valueA !== valueB || !Object.is(valueA, valueB)) return false;
}
return true;
}, 2);
//#endregion
export { isShallowEqual };