这是动态数组,每个数据数组都有不同数量的元素。 如何找到基于索引的平均值,然后将最终结果添加到序列数组的最后一个索引。
series[
{data:[1,2,3,5,10]},
{data:[6,9,10,6,10,6,5]},
{data:[2,5,4]},
]
var data = [];
var sum = 0;
var newseries = {};
for (var i = 0; i < series.length; i++) {
for(var j= 0;j<(Math.max(series[i].data.length);j++){
var rmv_undified=series[i].data[j];
if(rmv_undified!=undefined){
sum+=parseFloat(rmv_undified)/series.length;
}
}
data.push(sum);
};
newseries.data = data;
series.push(newseries);
但是我得到了这样的结果:
series[
{data:[1,2,3,5,10]},
{data:[6,9,10,6,10,6,5]},
{data:[2,5,4]},
{data:[7,17.33,3.66]}
// wrong result of above code working 1+2+3+5+10/3 = 7,6+9+10+6+10+6+5/3 = 17.33,2+5+4/3 = 3.66
]
我需要结果:
series[
{data:[1,2,3,5,10]},
{data:[6,9,10,6,10,6,5]},
{data:[2,5,4]},
{data:[3,5.33,5.66,3.66,6.66,2,1.66]} // index based average
]
答案 0 :(得分:1)
首先找到所有数组的最大长度,然后每次迭代遍历序列并平均第n个项目,直到n为最大长度。
let series = [
{data:[1,2,3,5,10]},
{data:[6,9,10,6,10,6,5]},
{data:[2,5,4]},
];
const maxl = [].reduce.call(series, (max, obj) => Math.max(obj.data.length, max), -1)
let avgs = [];
for (let i = 0; i < maxl; i++) {
let avg = [].reduce.call(series, (acc, n) => acc + (n.data[i] ? n.data[i] : 0), 0)/series.length;
avgs.push(avg);
}
series.push({data: avgs});
console.log(series);
答案 1 :(得分:0)
请尝试以下解决方案。我们必须首先遍历series
数组,然后遍历每个data
数组。
var series = [
{data:[1,2,3,5,10]},
{data:[6,9,10,6,10,6,5]},
{data:[2,5,4]},
];
var averageArray=[];
series.forEach(function(obj){
var sum=0;
obj.data.forEach(function(arrValue){
sum = sum + arrValue;
});
averageArray.push(sum/obj.data.length);
});
series.push({data:averageArray});
console.log(series)
答案 2 :(得分:0)
您必须先循环遍历j,然后为固定j遍历串联的不同数组。
或者,您可以保留代码并进行更改
sum+=
至
sum[j]+=
并将此变量初始化为数组。然后您必须相应地推动。
答案 3 :(得分:0)
首先,找到数据数组的最大长度。然后遍历系列数组的每个项目以找到平均值。 punkr code
function avgMultipleArrary(arr) {
var len = arr.length;
var sum = 0;
var maxLen=arr[0].data.length;
var resultArray = [];
for(var i=0;i<len;i++){
arr.map(function(arrEle,index){
if (maxLen < arrEle.data.length) {
maxLen = arrEle.data.length;
}
})
}
for(var i=0;i<maxLen;i++){
arr.map(function(arrEle,index){
var data = arrEle.data;
if(data[i] !== undefined)
sum +=data[i];
})
var avg = Number((sum/len).toFixed(2));
resultArray.push(avg)
sum =0;
}
arr.push({data:resultArray});
return arr;
}