UNPKG

1.04 kBPlain TextView Raw
1// Number.isNaN as it is not supported in IE11 so conditionally using ponyfill
2// Using Number.isNaN where possible as it is ~10% faster
3
4const safeIsNaN =
5 Number.isNaN ||
6 function ponyfill(value: unknown): boolean {
7 return typeof value === 'number' && value !== value;
8 };
9
10function isEqual(first: unknown, second: unknown): boolean {
11 if (first === second) {
12 return true;
13 }
14
15 // Special case for NaN (NaN !== NaN)
16 if (safeIsNaN(first) && safeIsNaN(second)) {
17 return true;
18 }
19
20 return false;
21}
22
23export default function areInputsEqual(
24 newInputs: readonly unknown[],
25 lastInputs: readonly unknown[],
26): boolean {
27 // no checks needed if the inputs length has changed
28 if (newInputs.length !== lastInputs.length) {
29 return false;
30 }
31 // Using for loop for speed. It generally performs better than array.every
32 // https://github.com/alexreardon/memoize-one/pull/59
33 for (let i = 0; i < newInputs.length; i++) {
34 if (!isEqual(newInputs[i], lastInputs[i])) {
35 return false;
36 }
37 }
38 return true;
39}