平均多个数组的每个项目(不同的数组长度和相同的数组名称)



我们的数组

这是动态数组,每个数据数组都有不同数量的元素。 如何找到基于索引的平均值,然后将最终结果添加到序列数组的最后一个索引中。

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
]

首先找到所有数组的最大长度,然后迭代序列并平均第 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);

你必须首先遍历 j,对于固定的 j,迭代串联的不同数组。

或者,您可以保留代码并更改
sum+=sum[j]+=此变量并将其初始化为数组。然后你必须相应地推动。

尝试以下解决方案。我们必须首先遍历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)

首先,找到数据数组的最大长度。 然后遍历序列数组的每个项目以找到平均值。 朋克尔代码

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;
}

最新更新