UNPKG

reach-et-deep_equals

Version:
52 lines (41 loc) 1.08 kB
/* eslint-disable no-use-before-define */ import { isObject } from 'reach-et-utilities/dist/checks'; function deepEqual(value1, value2) { if (Array.isArray(value1) && Array.isArray(value2)) { return arrayDeepEqual(value1, value2); } if (isObject(value1) && isObject(value2)) { return objectDeepEqual(value1, value2); } return value1 === value2; } function objectDeepEqual(object1, object2) { const keys1 = Object.keys(object1); const keys2 = Object.keys(object2); if (keys1.length !== keys2.length) { return false; } for (const key of keys1) { const val1 = object1[key]; const val2 = object2[key]; if (!deepEqual(val1, val2)) { return false; } } return true; } function arrayDeepEqual(array1, array2) { if (array1.length !== array2.length) { return false; } for (let i = 0; i < array1.length; i += 1) { const val1 = array1[i]; const val2 = array2[i]; if (!deepEqual(val1, val2)) { return false; } } return true; } export default deepEqual; /* eslint-enable no-use-before-define */