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

时间:2018-09-08 09:08:19

标签: javascript php jquery arrays

我们的数组

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

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

        ]

4 个答案:

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