@monstermann/fn
Version:
A utility library for TypeScript.
78 lines (76 loc) • 1.49 kB
JavaScript
import { dfdlT } from "@monstermann/dfdl";
//#region src/map/isShallowEqual.ts
/**
* `isShallowEqual(map, source)`
*
* Checks if `map` is shallow equal to `source` by comparing their keys and values using strict equality.
*
* ```ts
* isShallowEqual(
* new Map([
* ["a", 1],
* ["b", 2],
* ]),
* new Map([
* ["a", 1],
* ["b", 2],
* ]),
* ); // true
*
* isShallowEqual(
* new Map([
* ["a", 1],
* ["b", 2],
* ]),
* new Map([
* ["a", 1],
* ["b", 3],
* ]),
* ); // false
* ```
*
* ```ts
* pipe(
* new Map([
* ["a", 1],
* ["b", 2],
* ]),
* isShallowEqual(
* new Map([
* ["a", 1],
* ["b", 2],
* ]),
* ),
* ); // true
*
* pipe(
* new Map([
* ["a", 1],
* ["b", 2],
* ]),
* isShallowEqual(
* new Map([
* ["a", 1],
* ["b", 3],
* ]),
* ),
* ); // false
* ```
*/
const isShallowEqual = dfdlT((target, source) => {
if (target.size !== source.size) return false;
const seen = /* @__PURE__ */ new Set();
for (const k of target.keys()) {
seen.add(k);
if (!source.has(k)) return false;
if (target.get(k) !== source.get(k)) return false;
}
for (const k of source.keys()) {
if (seen.has(k)) continue;
if (!target.has(k)) return false;
if (target.get(k) !== source.get(k)) return false;
}
return true;
}, 2);
//#endregion
export { isShallowEqual };