// 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; }