UNPKG

@bazilio-san/af-stream

Version:
65 lines 2.34 kB
"use strict"; 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