我正在尝试获取每个值的百分比。 输入:
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
}
}
]
- 添加总年龄 285737 + 12217710 + 655187 + 9035930 + 927554 和性别 12467636 + 11872 + 17833279。
- 在获得每个 的总查找百分比之后。即(285737/总值(value)//23122118)* 100
- 输出可以有相同的 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/