|
12 | 12 | var isNumeric = require('fast-isnumeric');
|
13 | 13 | var loggers = require('./loggers');
|
14 | 14 | var identity = require('./identity');
|
| 15 | +var BADNUM = require('../constants/numerical').BADNUM; |
15 | 16 |
|
16 | 17 | // don't trust floating point equality - fraction of bin size to call
|
17 | 18 | // "on the line" and ensure that they go the right way specified by
|
@@ -74,20 +75,39 @@ exports.distinctVals = function(valsIn) {
|
74 | 75 | var vals = valsIn.slice(); // otherwise we sort the original array...
|
75 | 76 | vals.sort(exports.sorterAsc);
|
76 | 77 |
|
77 |
| - var l = vals.length - 1; |
78 |
| - var minDiff = (vals[l] - vals[0]) || 1; |
79 |
| - var errDiff = minDiff / (l || 1) / 10000; |
80 |
| - var v2 = [vals[0]]; |
| 78 | + var first; |
| 79 | + for(first = 0; first < vals.length; first++) { |
| 80 | + if(vals[first] !== BADNUM) break; |
| 81 | + } |
| 82 | + |
| 83 | + var last; |
| 84 | + for(last = vals.length - 1; last > -1; last--) { |
| 85 | + if(vals[last] !== BADNUM) break; |
| 86 | + } |
| 87 | + |
| 88 | + var minDiff = (vals[last] - vals[first]) || 1; |
| 89 | + var errDiff = minDiff / ((last - first) || 1) / 10000; |
| 90 | + var newVals = []; |
| 91 | + var preV; |
| 92 | + for(var i = first; i <= last; i++) { |
| 93 | + var v = vals[i]; |
| 94 | + if(v === BADNUM) continue; |
81 | 95 |
|
82 |
| - for(var i = 0; i < l; i++) { |
83 | 96 | // make sure values aren't just off by a rounding error
|
84 |
| - if(vals[i + 1] > vals[i] + errDiff) { |
85 |
| - minDiff = Math.min(minDiff, vals[i + 1] - vals[i]); |
86 |
| - v2.push(vals[i + 1]); |
| 97 | + var diff = v - preV; |
| 98 | + |
| 99 | + if(preV === undefined) { |
| 100 | + newVals.push(v); |
| 101 | + preV = v; |
| 102 | + } else if(diff > errDiff) { |
| 103 | + minDiff = Math.min(minDiff, diff); |
| 104 | + |
| 105 | + newVals.push(v); |
| 106 | + preV = v; |
87 | 107 | }
|
88 | 108 | }
|
89 | 109 |
|
90 |
| - return {vals: v2, minDiff: minDiff}; |
| 110 | + return {vals: newVals, minDiff: minDiff}; |
91 | 111 | };
|
92 | 112 |
|
93 | 113 | /**
|
|
0 commit comments