1234567891011121314151617181920212223242526272829303132333435363738394041 |
- // Number.isNaN as it is not supported in IE11 so conditionally using ponyfill
- // Using Number.isNaN where possible as it is ~10% faster
- const safeIsNaN =
- Number.isNaN ||
- function ponyfill(value: unknown): boolean {
- // // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#polyfill
- // NaN is the only value in JavaScript which is not equal to itself.
- return typeof value === 'number' && value !== value;
- };
- function isEqual(first: unknown, second: unknown): boolean {
- if (first === second) {
- return true;
- }
- // Special case for NaN (NaN !== NaN)
- if (safeIsNaN(first) && safeIsNaN(second)) {
- return true;
- }
- return false;
- }
- export default function areInputsEqual(
- newInputs: readonly unknown[],
- lastInputs: readonly unknown[],
- ): boolean {
- // no checks needed if the inputs length has changed
- if (newInputs.length !== lastInputs.length) {
- return false;
- }
- // Using for loop for speed. It generally performs better than array.every
- // https://github.com/alexreardon/memoize-one/pull/59
- for (let i = 0; i < newInputs.length; i++) {
- if (!isEqual(newInputs[i], lastInputs[i])) {
- return false;
- }
- }
- return true;
- }
|