* Return an array with minimum and maximum values, in the * form [min, max]. Ignores null, undefined, and NaN values.
(array2, f)
| 106808 | * Return an array with minimum and maximum values, in the |
| 106809 | * form [min, max]. Ignores null, undefined, and NaN values. |
| 106810 | */ function extent(array2, f) { |
| 106811 | let i = 0, n, v, min, max; |
| 106812 | if (array2 && (n = array2.length)) { |
| 106813 | if (f == null) { |
| 106814 | // find first valid value |
| 106815 | for(v = array2[i]; i < n && (v == null || v !== v); v = array2[++i]); |
| 106816 | min = max = v; // visit all other values |
| 106817 | for(; i < n; ++i){ |
| 106818 | v = array2[i]; // skip null/undefined; NaN will fail all comparisons |
| 106819 | if (v != null) { |
| 106820 | if (v < min) min = v; |
| 106821 | if (v > max) max = v; |
| 106822 | } |
| 106823 | } |
| 106824 | } else { |
| 106825 | // find first valid value |
| 106826 | for(v = f(array2[i]); i < n && (v == null || v !== v); v = f(array2[++i])); |
| 106827 | min = max = v; // visit all other values |
| 106828 | for(; i < n; ++i){ |
| 106829 | v = f(array2[i]); // skip null/undefined; NaN will fail all comparisons |
| 106830 | if (v != null) { |
| 106831 | if (v < min) min = v; |
| 106832 | if (v > max) max = v; |
| 106833 | } |
| 106834 | } |
| 106835 | } |
| 106836 | } |
| 106837 | return [ |
| 106838 | min, |
| 106839 | max |
| 106840 | ]; |
| 106841 | } |
| 106842 | function extentIndex(array3, f) { |
| 106843 | const n = array3.length; |
| 106844 | let i = -1, a, b, c, u, v; |