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

问题描述 投票:1回答:4

我们的阵列

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

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

        ]
javascript php jquery arrays
4个回答
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);

0
投票

你必须首先循环j,并且对于串行的不同数组,固定j迭代。

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


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)

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.