UNPKG

rx-store-core

Version:

A Rxjs and Immutable based Type-safe state management tool

40 lines (36 loc) 1.03 kB
import { ComparatorMap } from "rx-store-types"; export const objectShallowCompareF = <T extends { [k: string]: any }>( comparator: <K extends keyof T>(val1: T[K], val2: T[K]) => boolean = ( o1, o2 ) => o1 === o2, comparatorMap?: ComparatorMap<any> ) => (o1: T, o2: T) => { if (Object.getPrototypeOf(o1) !== Object.getPrototypeOf(o2)) { return false; } const ownKeysO1 = Object.getOwnPropertyNames(o1); const ownKeysO2 = Object.getOwnPropertyNames(o2); if (ownKeysO1.length !== ownKeysO2.length) { return false; } if (comparatorMap) { for (let key of ownKeysO1) { const compareFn = comparatorMap?.[key] ? comparatorMap[key]! : comparator; if (!compareFn(o1[key], o2[key])) { return false; } } } else { for (let key of ownKeysO1) { if (!comparator(o1[key], o2[key])) { return false; } } } return true; };