首页 > 解决方案 > 计算总值并使用该总值获得每个百分比值

问题描述

我正在尝试获取每个值的百分比。输入:

ShowList = [{
        age: {
            age_55_above: 285737,
            age_25_34: 12217710,
            age_unspecified: 655187,
            age_18_24: 9035930,
            age_45_54: 927554,
            …
        }
        gender: {
            male: 12467636,
            unspecified: 11872,
            female: 17833279
        }
    },
    {
        age: {
            age_55_above: 285237,
            age_25_34: 12227710,
            age_unspecified: 651187,
            age_18_24: 9135930,
            age_45_54: 9227554,
            …
        }
        gender: {
            male: 111467636,
            unspecified: 13872,
            female: 178344279
        }
    }
]
  1. 将年龄 285737 + 12217710 + 655187 + 9035930 + 927554 和性别 12467636 + 11872 + 17833279 相加。
  2. 在获得每个 . 即 (285737 / 总价值 //23122118) * 100
  3. 输出可以具有相同的 json 格式:
[{
        age: {
            age_55_above: % val,
            age_25_34:  % val,
            age_unspecified:  % val,
            age_18_24:  % val,
            age_45_54:  % val,
            …
        }
        gender: {
            male:  % val,
            unspecified:  % val,
            female:  % val
        }
    },
    {
        age: {
            age_55_above:  % val,
            age_25_34:  % val,
            age_unspecified:  % val,
            age_18_24:  % val,
            age_45_54:  % val,
            …
        }
        gender: {
            male:  % val,
            unspecified:  % val,
            female:  % val
        }
    }
]

我试过的:首先我试图得到总数,然后从每个值中取出百分比。欢迎任何解决方案。

for (var key in this.ShowsList) {
          for (var keyGender in this.ShowsList[key]) {
              total[key] = {};
              for (var keyVal in this.ShowsList[key][keyGender]) {
                total[key] = total[key] || {};
                total[key]["gender"] = total[key]["gender"] || 0;
                total[key]["age"] = total[key]["age"] || 0;
                if(this.ShowsList[key]["gender"][keyVal] != undefined){
                  total[key]["gender"] += this.ShowsList[key]["gender"][keyVal];
                }
                if(this.ShowsList[key]["age"][keyVal] != undefined){
                  total[key]["age"] += this.ShowsList[key]["age"][keyVal];
                }
                Obj[key] = Obj[key] || {};
                Obj[key][keyGender] = Obj[key][keyGender] || {};
                Obj[key][keyGender][keyVal] = Obj[key][keyGender][keyVal] || 0;
                // Logic to calculate percentage

                // Obj[key]["gender"][keyVal] = ((this.ShowsList[key]["gender"][keyVal]/ total[key]["gender"]) * 100);
// Obj[key]["age"][keyVal] = ((this.ShowsList[key]["age"][keyVal]/ total[key]["gender"]) * 100);

              }
          }
        }

标签: javascript

解决方案


您可以采用完整的动态方法并通过添加项目并返回部分来获取百分比值。

function getPercent(object) {
    var entries = Object.entries(object),
        sum = entries.reduce((s, { 1: v }) => s + v, 0);

    return Object.assign({}, ...entries.map(([k, v]) => ({ [k]: v * 100 / sum })));
}

var data = [{ age: { age_55_above: 285737, age_25_34: 12217710, age_unspecified: 655187, age_18_24: 9035930, age_45_54: 927554 }, gender: { male: 12467636, unspecified: 11872, female: 17833279 } }, { age: { age_55_above: 285237, age_25_34: 12227710, age_unspecified: 651187, age_18_24: 9135930, age_45_54: 9227554 }, gender: { male: 111467636, unspecified: 13872, female: 178344279 } }],
    result = data.map(o => Object.assign(
        {},
        ...Object.entries(o).map(([k, v]) => ({ [k]: getPercent(v) }))
    ));

   console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读