我有兩個數組,其中一個表示數據,另一個表示數據 - 間隔。兩者都進行排序並且其開始和結束值相匹配。我通過嵌套for循環計算給定時間間隔內數據點的平均值。結果,我最終得到每個區間的一個數據值。對於尺寸較小的陣列,長度爲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,60,70,80,90,100])''結果在'49.09090909090909' – SpYk3HH
TimelineArray的元素之間的間隔是否始終相同(本例中爲10)? – 10100111001