26.05.2024, 09:47
Hallo,
ich möchte eine funktion für einen Gleitenden Mittelvert (MovingAverage) schreiben.
Dazu muss ich vorherige Werte speichern können.
Nun hab ich, weil es in Javascript offenbar keine statischen Variablen gibt ein Array als Globale Variable namens "maValues" definiert, auf welche ich in der Funktion zugreifen möchte. Dies gibt jedoch den Fehler: " TypeError: Cannot read properties of undefined (reading 'push')"
Offenbar kennt er die Methode push nicht, weil in der Funktion das Array nicht kreiert wurde.?
Ausserhalb der funktion wurde das Array offenbar schon kreiert, aber die Funktion scheint davon nichts mitbekommen zu haben.
Ich kann das Array aber nicht in der Funktion kreieren, sonst ist es bei jedem Aufruf wieder leer.
Wie kann man so was in JS realisieren?
ich möchte eine funktion für einen Gleitenden Mittelvert (MovingAverage) schreiben.
Dazu muss ich vorherige Werte speichern können.
Nun hab ich, weil es in Javascript offenbar keine statischen Variablen gibt ein Array als Globale Variable namens "maValues" definiert, auf welche ich in der Funktion zugreifen möchte. Dies gibt jedoch den Fehler: " TypeError: Cannot read properties of undefined (reading 'push')"
Offenbar kennt er die Methode push nicht, weil in der Funktion das Array nicht kreiert wurde.?
Ausserhalb der funktion wurde das Array offenbar schon kreiert, aber die Funktion scheint davon nichts mitbekommen zu haben.
Ich kann das Array aber nicht in der Funktion kreieren, sonst ist es bei jedem Aufruf wieder leer.
Wie kann man so was in JS realisieren?
Code:
var width = 3;
var maValues=[];
function ma(newValue) {
var maSum = 0;
var maValue = 0;
var maLength = 0;
maValues.push(newValue); // Add the new value
if (maValues.length > width) {
maValues.shift(); // Remove the first value
}
maLength = maValues.length;
maSum = 0;
for (let j = 0; j < maValues.length; j++) {
maSum += maValues[j];
}
console.log("MA length=" + maLength + "; MA sum=" + maSum);
maValue = maSum / maLength;
return maValue;
}