Skip to content

Commit e03737c

Browse files
committed
fix: improve speed by not predefining arrays length
1 parent 3de56ae commit e03737c

File tree

1 file changed

+19
-27
lines changed

1 file changed

+19
-27
lines changed

src/gsd.js

Lines changed: 19 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -121,14 +121,11 @@ export function gsd(data, options = {}) {
121121

122122
let lastMax = null;
123123
let lastMin = null;
124-
let minddY = new Array(yData.length - 2);
125-
let intervalL = new Array(yData.length);
126-
let intervalR = new Array(yData.length);
127-
let broadMask = new Array(yData.length - 2);
128-
let minddYLen = 0;
129-
let intervalLLen = 0;
130-
let intervalRLen = 0;
131-
let broadMaskLen = 0;
124+
let minddY = [];
125+
let intervalL = [];
126+
let intervalR = [];
127+
let broadMask = [];
128+
132129
// By the intermediate value theorem We cannot find 2 consecutive maximum or minimum
133130
for (let i = 1; i < yData.length - 1; ++i) {
134131
// filter based on derivativeThreshold
@@ -144,8 +141,8 @@ export function gsd(data, options = {}) {
144141
index: i,
145142
};
146143
if (dX > 0 && lastMax !== null) {
147-
intervalL[intervalLLen++] = lastMax;
148-
intervalR[intervalRLen++] = lastMin;
144+
intervalL.push(lastMax);
145+
intervalR.push(lastMin);
149146
}
150147
}
151148

@@ -159,26 +156,21 @@ export function gsd(data, options = {}) {
159156
index: i,
160157
};
161158
if (dX < 0 && lastMin !== null) {
162-
intervalL[intervalLLen++] = lastMax;
163-
intervalR[intervalRLen++] = lastMin;
159+
intervalL.push(lastMax);
160+
intervalR.push(lastMin);
164161
}
165162
}
166163
}
167164

168165
// Minimum in second derivative
169166
if (ddY[i] < ddY[i - 1] && ddY[i] < ddY[i + 1]) {
170167
// TODO should we change this to have 3 arrays ? Huge overhead creating arrays
171-
minddY[minddYLen++] = i; // ( [xData[i], yData[i], i] );
172-
broadMask[broadMaskLen++] = Math.abs(ddY[i]) <= broadRatio * maxDdy;
168+
minddY.push(i); // ( [xData[i], yData[i], i] );
169+
broadMask.push(Math.abs(ddY[i]) <= broadRatio * maxDdy);
173170
}
174171
}
175-
minddY.length = minddYLen;
176-
intervalL.length = intervalLLen;
177-
intervalR.length = intervalRLen;
178-
broadMask.length = broadMaskLen;
179172

180-
let signals = new Array(minddY.length);
181-
let signalsLen = 0;
173+
let signals = [];
182174
let lastK = -1;
183175
let possible, frequency, distanceJ, minDistance, gettingCloser;
184176
for (let j = 0; j < minddY.length; ++j) {
@@ -206,27 +198,27 @@ export function gsd(data, options = {}) {
206198

207199
if (possible !== -1) {
208200
if (Math.abs(yData[minddY[j]]) > minMaxRatio * maxY) {
209-
signals[signalsLen++] = {
201+
signals.push({
210202
index: minddY[j],
211203
x: frequency,
212204
y: (yData[minddY[j]] + yCorrection.b) / yCorrection.m,
213205
width: Math.abs(intervalR[possible].x - intervalL[possible].x), // widthCorrection
214206
soft: broadMask[j],
215-
};
207+
});
216208

217-
signals[signalsLen - 1].left = intervalL[possible];
218-
signals[signalsLen - 1].right = intervalR[possible];
209+
signals[signals.length - 1].left = intervalL[possible];
210+
signals[signals.length - 1].right = intervalR[possible];
219211

220212
if (heightFactor) {
221213
let yLeft = yData[intervalL[possible].index];
222214
let yRight = yData[intervalR[possible].index];
223-
signals[signalsLen - 1].height =
224-
heightFactor * (signals[signalsLen - 1].y - (yLeft + yRight) / 2);
215+
signals[signals.length - 1].height =
216+
heightFactor *
217+
(signals[signals.length - 1].y - (yLeft + yRight) / 2);
225218
}
226219
}
227220
}
228221
}
229-
signals.length = signalsLen;
230222

231223
if (realTopDetection) {
232224
determineRealTop(signals, xData, yData);

0 commit comments

Comments
 (0)