groupBy(): minor refactor

This commit is contained in:
Alexander Zobnin
2017-07-28 12:37:28 +03:00
parent 1899d32152
commit e626ce4ca2
4 changed files with 29 additions and 21 deletions

View File

@@ -83,6 +83,10 @@ System.register(['lodash', './utils'], function (_export, _context) {
} }
function groupBy_perf(datapoints, interval, groupByCallback) { function groupBy_perf(datapoints, interval, groupByCallback) {
if (datapoints.length === 0) {
return [];
}
var ms_interval = utils.parseInterval(interval); var ms_interval = utils.parseInterval(interval);
var grouped_series = []; var grouped_series = [];
var frame_values = []; var frame_values = [];

File diff suppressed because one or more lines are too long

View File

@@ -108,6 +108,10 @@ function groupBy(datapoints, interval, groupByCallback) {
} }
function groupBy_perf(datapoints, interval, groupByCallback) { function groupBy_perf(datapoints, interval, groupByCallback) {
if (datapoints.length === 0) {
return [];
}
var ms_interval = utils.parseInterval(interval); var ms_interval = utils.parseInterval(interval);
var grouped_series = []; var grouped_series = [];
var frame_values = []; var frame_values = [];

View File

@@ -95,6 +95,10 @@ function groupBy(datapoints, interval, groupByCallback) {
} }
function groupBy_perf(datapoints, interval, groupByCallback) { function groupBy_perf(datapoints, interval, groupByCallback) {
if (datapoints.length === 0) {
return [];
}
let ms_interval = utils.parseInterval(interval); let ms_interval = utils.parseInterval(interval);
let grouped_series = []; let grouped_series = [];
let frame_values = []; let frame_values = [];
@@ -103,32 +107,28 @@ function groupBy_perf(datapoints, interval, groupByCallback) {
let point_frame_ts = frame_ts; let point_frame_ts = frame_ts;
let point; let point;
if (datapoints.length > 0) { for (let i=0; i < datapoints.length; i++) {
point = datapoints[i];
point_frame_ts = getPointTimeFrame(point[POINT_TIMESTAMP], ms_interval);
if (point_frame_ts === frame_ts) {
frame_values.push(point[POINT_VALUE]);
} else if (point_frame_ts > frame_ts) {
frame_value = groupByCallback(frame_values);
grouped_series.push([frame_value, frame_ts]);
for (let i=0; i < datapoints.length; i++) { // Move frame window to next non-empty interval and fill empty by null
point = datapoints[i]; frame_ts += ms_interval;
point_frame_ts = getPointTimeFrame(point[POINT_TIMESTAMP], ms_interval); while (frame_ts < point_frame_ts) {
if (point_frame_ts === frame_ts) { grouped_series.push([null, frame_ts]);
frame_values.push(point[POINT_VALUE]);
} else if (point_frame_ts > frame_ts) {
frame_value = groupByCallback(frame_values);
grouped_series.push([frame_value, frame_ts]);
// Move frame window to next non-empty interval and fill empty by null
frame_ts += ms_interval; frame_ts += ms_interval;
while (frame_ts < point_frame_ts) {
grouped_series.push([null, frame_ts]);
frame_ts += ms_interval;
}
frame_values = [point[POINT_VALUE]];
} }
frame_values = [point[POINT_VALUE]];
} }
frame_value = groupByCallback(frame_values);
grouped_series.push([frame_value, frame_ts]);
} }
frame_value = groupByCallback(frame_values);
grouped_series.push([frame_value, frame_ts]);
return grouped_series; return grouped_series;
} }