javascript - 计算总值并使用该总值获得每个值的百分比值

标签 javascript

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

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/总值(value)//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);

              }
          }
        }

最佳答案

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

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

关于javascript - 计算总值并使用该总值获得每个值的百分比值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57870396/

相关文章:

javascript - 隐藏下拉列表日历中不正确的日期

javascript - 用于保存隐藏数据的 HTML 表属性

javascript - 创建堆叠图像视差

javascript - 在新游戏开始前将计时器和得分值重置为 0

javascript - 验证是否选择了文本(在 div 中)

javascript - 如何禁用浏览器的默认右键单击菜单

javascript - Protractor 如何测试列表中的最后一个项目类

javascript - 正则表达式选择相邻的模式匹配项作为单个项

javascript - rails : Controller redirect vs Javascript redirect

javascript - 如何定义使用先前值确定 Knockout 类的自定义绑定(bind)?