У меня есть два массива, один из которых представляет данные, а другой - интервалы. Оба сортируются, и их начальные и конечные значения совпадают. Я просматриваю вложенные для циклов вычисления среднего значения точек данных за данный интервал. В результате я получаю одно значение данных для каждого интервала. Для массивов меньшего размера, < 100-500 длины, эти линейные петли выполняют свою работу, однако этот подход становится проблемой с несколькими тысячами точек данных. Любые рекомендации будут оценены.Массивы JavaScript - эффективно вычислять среднее значение в заданных интервалах
Пожалуйста, смотрите упрощенный код ниже со ссылкой на JSfiddle в конце
var TimelineArray = [0, 10, 20, 30, 40, 40, 60, 70, 80, 90, 100],
\t DataArray = [0, 2, 4, 5, 8, 11, 19, 22, 24, 25, 30, 31, 38, 39, 51, 56, 57, 58, 59, 64, 74, 76, 89, 91, 92, 94, 98, 100],
\t DataArrayA = [];
for (i = 0; i < TimelineArray.length-1; i++) {
\t var dataPointsInGivenTimeInterval = [];
\t for (j = 0; j < DataArray.length; j++) {
\t \t if (DataArray[j] > TimelineArray[i] && DataArray[j] <= TimelineArray[i+1]) {
\t \t \t dataPointsInGivenTimeInterval.push(DataArray[j]);
\t \t }
\t };
\t if (dataPointsInGivenTimeInterval.length == 0) {
\t \t DataArrayA.push(null);
\t }
\t else {
\t \t var sumOfdataPoints = null;
\t \t for (k = 0; k < dataPointsInGivenTimeInterval.length; k++) {
\t \t \t sumOfdataPoints += dataPointsInGivenTimeInterval[k];
\t \t }
\t \t var avg = sumOfdataPoints/dataPointsInGivenTimeInterval.length;
\t \t DataArrayA.push(avg);
\t }
} // end for
console.log(TimelineArray);
console.log(DataArrayA);
.as-console-wrapper {
max-height: 100% !important;
top: 0;
}
Выход консоли
[0, 10, 20, 30, 40, 40, 60, 70, 80, 90, 100]
[4.75, 15, 25.25, 36, null, 56.2, 64, 75, 89, 95]
Вот код на JSfiddle - calculating average values for given intervals
У меня есть простое решение для получения средних значений из массивов, если это помогает? и сложный, который добавляет такие функции к математическому объекту? – SpYk3HH
https://github.com/JDMcKinstry/Math.Extensions использовать 'Math.average ([0, 10, 20, 30, 40, 40, 60, 70, 80, 90, 100])' приводит к '49.09090909090909' – SpYk3HH
Является ли TimelineArray всегда одинаковым интервалом между элементами (в данном случае 10)? – 10100111001