Soy un novato para javascript. Tengo dos variables, una es Ax2 y la otra es Ay2, se actualizarán constantemente, quiero obtener el promedio de sus últimos 10 perfiles actualizados, así que probé esto, pero no funcionó, ¿alguien puede ayudarme?
var Ax2 = 0 var Ay2 = 0 connection.on("ReceiveMessage", function (target) { Ax2 = `${target} ` document.getElementById('Ax2').textContent = Ax2 ; }); connection.on("ReceiveMessage2", function (target2) { Ay2 = `${target2} ` * -1 document.getElementById('Ay2').textContent = Ay2 ; }); let arr1 = new Array(10); let arr2 = new Array(10); function ArrayAvg1(arr1) { var i = -1, summ = 0, ArrayLen1 = arr1.length; while (i < ArrayLen1) { arr1.push(Ax2) summ = summ + arr1[i++]; } return summ / ArrayLen1; } function ArrayAvg2(arr2) { var i = -1, summ = 0, ArrayLen2 = arr2.length; while (i < ArrayLen2) { arr2.push(Ay2) summ = summ + arr2[i++]; } return summ / ArrayLen2; } var AX_after_correction = Ax2 - ArrayAvg1(arr1) var AY_after_correction = Ay2 - ArrayAvg2(arr2) var AX_after_correction = document.getElementById('AX_after_correction') var AY_after_correction = document.getElementById('AY_after_correction')Prueba este código a continuación:
var Ax2 = 0; var Ay2 = 0; let arrR = new Array(10); connection.on("ReceiveMessage", function (;target) { Ax2 = `${target} ` document.getElementById('Ax2').textContent = Ax2 ; }); connection.on("ReceiveMessage2", function (target2) { Ay2 = `${target2} ` * -1 document.getElementById('Ay2').textContent = Ay2 ; }); function ArrayAvg1(arr, val) { arr.push(val) let count = 0 let numOr0 = n => isNaN(n) ? 0 : n arr.forEach(num => (typeof num) && count++) let sum = arr.reduce((a, b) => numOr0(a) + numOr0(b)) return sum / count; } var AX_after_correction = Ax2 - ArrayAvg1(arrR, Ax2) var AY_after_correction = Ay2 - ArrayAvg1(arrR, Ay2) var AX_after_correction = document.getElementById('AX_after_correction') var AY_after_correction = document.getElementById('AY_after_correction') Pero creo que arrR devolverá un new Array(10) cada vez que vuelva a ejecutar el código.
¿Qué marco usas para construir la aplicación?
No estoy seguro de lo que estás tratando de lograr, pero:
var e ir por let o const ,Dicho esto, suponiendo que tiene una matriz de números, hay algunas formas de obtener el valor promedio .
AFAIC, me quedaría con este :
const average = (array) => array.reduce((a, b) => a + b) / array.length; La función array.reduce() puede ser difícil de entender al principio... Aquí, está recorriendo la matriz y sumando cada valor actual b en el acumulador a , y devuelve la suma.
const average = (array) => ...;Esta notación le permite declarar una función de flecha que toma una matriz como parámetro.
array.reduce((a, b) => a + b) / array.length básicamente devuelve la suma de los valores de la matriz dividida por la longitud de la matriz.
En cuanto a lo que estás haciendo
var Ax2 = 0 // updated on an event let arr1 = new Array(10); function ArrayAvg1(arr1) { var i = -1, summ = 0, ArrayLen1 = arr1.length; while (i < ArrayLen1) { arr1.push(Ax2) // you're pushing Ax2 10 times ? summ = summ + arr1[i++]; // this is weird } return summ / ArrayLen1; }Como realmente no entiendo cuál es tu objetivo, no puedo ayudarte más.