Skip to content

Commit 615757f

Browse files
committed
improve handling of gaps in distinctVals
1 parent 74dfee0 commit 615757f

File tree

1 file changed

+29
-9
lines changed

1 file changed

+29
-9
lines changed

src/lib/search.js

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
var isNumeric = require('fast-isnumeric');
1313
var loggers = require('./loggers');
1414
var identity = require('./identity');
15+
var BADNUM = require('../constants/numerical').BADNUM;
1516

1617
// don't trust floating point equality - fraction of bin size to call
1718
// "on the line" and ensure that they go the right way specified by
@@ -74,20 +75,39 @@ exports.distinctVals = function(valsIn) {
7475
var vals = valsIn.slice(); // otherwise we sort the original array...
7576
vals.sort(exports.sorterAsc);
7677

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;
8195

82-
for(var i = 0; i < l; i++) {
8396
// 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;
87107
}
88108
}
89109

90-
return {vals: v2, minDiff: minDiff};
110+
return {vals: newVals, minDiff: minDiff};
91111
};
92112

93113
/**

0 commit comments

Comments
 (0)