@bazilio-san/af-stream
Version:
Data stream from database table
65 lines • 2.34 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.findIndexOfNearestSmaller = exports.findIndexOfNearestSmallerBINARY = exports.findIndexOfNearestSmallerRIGHT = exports.findIndexOfNearestSmallerLEFT = void 0;
/* eslint-disable camelcase */
const constants_1 = require("../constants");
const findIndexOfNearestSmallerLEFT = (arr, x, timeFieldName = constants_1.TS_FIELD) => {
if (!arr.length) {
return -1;
}
const index = arr.findIndex((v) => v[timeFieldName] >= x);
if (index > -1) {
return index - 1;
}
if (x < arr[0][timeFieldName]) {
return -1;
}
return arr.length - 1;
};
exports.findIndexOfNearestSmallerLEFT = findIndexOfNearestSmallerLEFT;
const findIndexOfNearestSmallerRIGHT = (arr, x, timeFieldName = constants_1.TS_FIELD) => {
let pos = arr.length;
if (pos) {
while (--pos >= 0) {
if (arr[pos][timeFieldName] < x) {
return pos;
}
}
}
return -1;
};
exports.findIndexOfNearestSmallerRIGHT = findIndexOfNearestSmallerRIGHT;
const findIndexOfNearestSmallerBINARY = (arr, x, timeFieldName = constants_1.TS_FIELD) => {
let start = 0;
let end = arr.length - 1;
let ans = -1;
while (start <= end) {
const mid = Math.floor((start + end) / 2);
if (arr[mid][timeFieldName] === x) {
return mid - 1;
}
if (arr[mid][timeFieldName] > x) {
end = mid - 1;
}
else {
ans = mid;
start = mid + 1;
}
}
return ans;
};
exports.findIndexOfNearestSmallerBINARY = findIndexOfNearestSmallerBINARY;
const findIndexOfNearestSmaller = (arr, x, timeFieldName = constants_1.TS_FIELD) => {
const { length } = arr;
if (!length) {
return -1;
}
if (arr.length > 2000) {
return (0, exports.findIndexOfNearestSmallerBINARY)(arr, x, timeFieldName);
}
return ((arr[length - 1] - arr[0]) / 2) < x
? (0, exports.findIndexOfNearestSmallerRIGHT)(arr, x, timeFieldName)
: (0, exports.findIndexOfNearestSmallerLEFT)(arr, x, timeFieldName);
};
exports.findIndexOfNearestSmaller = findIndexOfNearestSmaller;
//# sourceMappingURL=find-index-of-nearest-smaller.js.map