代码之家  ›  专栏  ›  技术社区  ›  stone rock

如何在ES6中使用reduce()计算平均值?

  •  2
  • stone rock  · 技术社区  · 7 年前

    我正在尝试从JSON数据中提取 econ season 我想找出每个季节的平均经济率

    例如: season=2018 economy rate=10,20,30 so avg economy rate=(10+20+30)/3=20

    season=2017 economy rate=30,40,50 so avg economy rate=(30+40+50)/3=40

    因此,我要计算特定季节的所有经济率之和,然后取平均值,即将特定季节的总金额除以该季节的比赛数。

    下面是我尝试使用ES6中 reduce()的代码:

    const economy=bowldata.reduce((a,season,econ)=>。{
    A[季节]=A[季节]+ParseInt(Econ);
    返回A;
    },);
    console.log(经济型);
    

    我得到的是2018:nanbut I want my output to be 2018:22,2017:50,etc.I.E I want key value pairs of season and average economy rate for that season.

    屏幕截图:

    假设我有json数据:

    var bowldata=[
    {
    季节:2018
    经济:10
    },请
    季节:2018
    经济:20
    },请
    季节:2018
    经济:30
    },请
    季节:2017年
    经济:40
    },请
    季节:2017年
    经济:50
    },请
    季节:2016年
    经济:10
    },请
    ]
    

    现在,对象whichreduce()should return is key value pairs of year and average economy rate.

    结果:[2018:20,2017:45,2016:10]

    如:season = 2018 economy rate = 10,20,30 so avg economy rate = (10+20+30)/3 = 20

    season = 2017 economy rate = 30,40,50 so avg economy rate = (30+40+50)/3 = 40

    所以我要计算出特定季节的所有经济率之和,然后取平均值,即用特定季节的总金额除以该季节的比赛数量。

    下面是我试图利用的代码reduce()在ES6中:

    const economy = bowldata.reduce( (a,{season, econ})  => {
                        a[season] = a[season] + parseInt(econ);
                        return a; 
                    }, {});
    console.log(economy);
    

    我得到了2018:NaN但是,我希望我的产出是2018:22、2017:50等,也就是说,我希望那个季节的关键价值对和平均经济率。

    截图:

    enter image description here

    假设我有JSON数据:

    var bowldata = [
        {
            season:2018
            economy:10
        },
        {   season:2018
            economy:20
        },
        {   season:2018
            economy:30
        },
        {   season:2017
            economy:40
        },
        {   season:2017
            economy:50
        },
        {   season:2016
            economy:10
        },
    ]
    

    现在这个物体减少()应回报是关键价值对年平均经济率。

    结果:[ 2018:20 , 2017:45 , 2016:10 ]

    5 回复  |  直到 7 年前
        1
  •  2
  •   Nina Scholz    7 年前

    var bowldata = [{ season: 2001, econ: '30' }, { season: 2001, econ: '40' }, { season: 2001, econ: '50' }, { season: 2001, econ: '60' }, { season: 2002, econ: '30' }, { season: 2002, econ: '40' }, { season: 2002, econ: '50' }, { season: 2003, econ: '60' }, { season: 2003, econ: '30' }, { season: 2003, econ: '40' }, { season: 2003, econ: '50' }, { season: 2003, econ: '60' }],
        economy = bowldata.reduce((a, { season, econ }) => {
            a[season] = a[season] || { sum: 0, count: 0 };
            a[season].sum += +econ;
            a[season].average = a[season].sum / ++a[season].count;
            return a;
        }, Object.create(null)),
        nice = Object.assign(...Object
            .entries(economy)
            .map(([k, { average }]) => ({ [k]: average }))
        );
    
    console.log(nice);
    console.log(economy);
    .as-console-wrapper { max-height: 100% !important; top: 0; }
        2
  •  2
  •   charlietfl    7 年前

    更改

    a[season] = a[season] + parseInt(econ);
    

    a[season] = (a[season] || 0 ) + parseInt(econ);
    

        3
  •  1
  •   Sergio Mazzoleni    7 年前

    第一次执行 a[season] = a[season] + parseInt(econ); a[season] 0 第一次访问它。

    const economy = bowldata.reduce( (a,{season, econ})  => {
        if (!a[season]) {
            a[season] = 0;
        }
        a[season] = a[season] + parseInt(econ);
        return a; 
    }, {});
    
        4
  •  1
  •   Lionel Rowe    7 年前

    平均值

    const totals = bowldata.reduce((acc, cur)  => {
    
      if (!acc[cur.season]) {
        acc[cur.season] = {count: 0, total: 0};
      }
    
      acc[cur.season].count++;
      acc[cur.season].total += parseInt(cur.econ);
    
      return acc; 
    }, {});
    
    const averages = {};
    
    Object.keys(totals).forEach(key => {
    
      averages[key] = totals[key].total / totals[key].count;
    
    });
    
        5
  •  1
  •   godpanrupesh    7 年前
    hi您可以通过以下减少和映射链来解决问题:
    ii)获得季节和平均经济的地图
    
    

    bowldata.reduce((acc,b)=>。{ },[])
    },[])

    )