为了账号安全,请及时绑定邮箱和手机立即绑定

对对象数组的每 5 个值求和

对对象数组的每 5 个值求和

一只名叫tom的猫 2021-11-12 16:50:25
假设我有一个像这样不确定长度的对象数组jString = [  {    "value": "2,335.47"  },  {    "value": "2,862.96"  },  {    "value": "2,217.31"  },  {    "value": "1,627.01"  },  {    "value": "1,103.52"  },  {    "value": "1,718.69"  },  {    "value": "1,992.83"  },  {    "value": "3,796.26"  },  {    "value": "3,800.43"  },  {    "value": "2,128.62"  },  {    "value": "2,661.56"  }]我需要获得每 5 个元素的总和平均值并作为新数组返回我认为地图功能效果最好,但它对我不起作用。 function sumAvg(arr) {            var sum = 0;            avg= arr.map(function(item){              for(var i = 0; i <arr.length -1; i++){                sum = (item.value[i] + item.value[i+1] + item.value[i+2] + item.value[i+3] + item.value[i+4])/5;              }              return item = sum;            })            return avg;           }           var avgString= sumAvg(jString);           console.log(avgString);
查看完整描述

3 回答

?
阿晨1998

TA贡献2037条经验 获得超6个赞

您的问题有点不清楚您是想要每个连续 5 个元素的总和还是平均值。这是获取总和的代码,还有一些关于如何从中获取平均值的附加说明。


const data = [{"value":"2,335.47"},{"value":"2,862.96"},{"value":"2,217.31"},{"value":"1,627.01"},{"value":"1,103.52"},{"value":"1,718.69"},{"value":"1,992.83"},{"value":"3,796.26"},{"value":"3,800.43"},{"value":"2,128.62"},{"value":"2,661.56"}];


// Create a new array

const out = [];


// While there are elements remaining

while (data.length > 0) {


  // `splice` off 5 elements from the array

  const next = data.splice(0, 5)


  // `reduce` over those 5 elements adding up the values

  // Note 1: If you want to get the average just add `/ 5`

  // to the end of this expression

  // Note 2: we have to remove the comma from the value string in

  // order to parse it properly

  const sum = next.reduce((a, b) => {

    return a + Number.parseFloat(b.value.replace(/,/g, ''));

  }, 0);


  // Push the stringified sum to the output array.

  out.push(sum.toFixed(2));

}


console.log(out);

进一步阅读


查看完整回答
反对 回复 2021-11-12
?
互换的青春

TA贡献1797条经验 获得超6个赞

地图不会以您想要的方式工作。您正在对每个 5 个元素组进行计算,其中一些计算 4 次。

您可以获取前五个元素,进行平均,将其存储在某处,然后将其删除。重复这个直到数组为空


查看完整回答
反对 回复 2021-11-12
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

function sumAvg(arr) {

            var sum = 0;

            avg= arr.map(function(item){

              for(var i = 0; i <arr.length -1; i++){

                sum = (item.value[i] + item.value[i+1] + item.value[i+2] + item.value[i+3] + item.value[i+4])/5;

              }

              return item = sum;

            })

            return avg;

           }


           var avgString= sumAvg(jString);


           console.log(avgString);

将 for 循环中的 sum 更改为如下所示:


for(var i = 0; i <arr.length -1; i++){

                    sum += item.value[i];

                  }

然后在 for 循环内你可以有如下内容:


if i == 5 then

sum = sum/5;

end if

这将返回 json 中 5 个项目总和的平均值。我假设这就是你要找的,我不推荐这个 sum = (item.value[i] + item.value[i+1] + item.value[i+2] + item.value[i+ 3] + item.value[i+4])/5; 因为您会遇到索引错误,尤其是在 json 的长度未知的情况下。


如果您正在查看求和的平均值,则在将 5 个值加在一起后,将 if 语句调整为:


if i % 5 == 0 then

sum = sum/5;

end if

希望这有任何帮助。


查看完整回答
反对 回复 2021-11-12
  • 3 回答
  • 0 关注
  • 198 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信