Hola, estoy haciendo un trabajo en el trabajo donde tenemos un sistema de cámara que hace ping cada vez que alguien entra o sale de una habitación, por lo que tendría datos como este:
{enter:7, exit:6}lo que debería significar que una persona se queda en la habitación
Quiero saber cuál fue la mayor cantidad de personas en la sala durante un período determinado, digamos 45 minutos. Podría tener de 50 a 100 puntos de datos, ¿cómo puedo saber cuál sería el promedio?
Gracias
// actualice con un ejemplo de código aquí
.then((results) => { // maybe a correct algorithim results.sort((a, b) => b.enter - a.enter); results.sort((a, b) => b.exit - a.exit); results.sort((a, b) => a.enter - b.enter || b.exit - a.exit); // results.sort(fieldSorter(["enter"])); let final_result = result.pop(); console.log(final_result); if (final_result) { return parseInt(final_result.enter - final_result.exit); } else { return 0; } })Entonces, antes de este código, estoy reuniendo todos los puntos de datos, luego intente clasificarlos y saque la entrada más alta a las salidas más bajas, pero creo que estoy haciendo esto mal
Suponiendo que el tiempo de entrada siempre sea menor que el tiempo de salida (lo que contradice los datos de su ejemplo), el problema podría resolverse así:
function getAverage(startTime, endTime, items) { let slots = {}; for (let timeIndex = startTime; timeIndex <= endTime; timeIndex++) { slots[timeIndex] = 0; } for (item of items) { let enter = Math.min(item.enter, startTime); let exit = Math.min(item.exit, endTime); for (let momentIndex = enter; momentIndex <= exit; momentIndex++) { slots[momentIndex]++; } } let avg = 0; for (let slot of slots) avg += slot; return avg / slots.length; }EDITAR
Para calcular el máximo puedes hacer algo como esto:
function getAverage(startTime, endTime, items) { let slots = {}; for (let timeIndex = startTime; timeIndex <= endTime; timeIndex++) { slots[timeIndex] = 0; } for (item of items) { let enter = Math.min(item.enter, startTime); let exit = Math.min(item.exit, endTime); for (let momentIndex = enter; momentIndex <= exit; momentIndex++) { slots[momentIndex]++; } } let max = 0; for (let slot of slots) max = Math.max(max, slot); return max; }