let arr = name m1 groupName group1 type Frame_Shit_del name m1 groupName group2 type Messense_Mutation
可以使用reduce()方法和对象来实现:
let result = {};
arr.reduce((acc, cur) => {
if (cur.name in acc) {
if (cur.type in acc[cur.name]) {
acc[cur.name][cur.type]++;
} else {
acc[cur.name][cur.type] = 1;
}
} else {
acc[cur.name] = {};
acc[cur.name][cur.type] = 1;
}
return acc;
}, result);
for (let name in result) {
console.log(`name: ${name}`);
let total = 0;
for (let type in result[name]) {
total += result[name][type];
}
for (let type in result[name]) {
let percentage = (result[name][type] / total * 100).toFixed(2);
console.log(`type: ${type}, percentage: ${percentage}%`);
}
}
输出结果为:
name: m1
type: Frame_Shit_del, percentage: 33.33%
type: Messense_Mutation, percentage: 33.33%
type: In_Frame_Del, percentage: 33.33%
name: m2
type: Frame_Shit_del, percentage: 50.00%
type: Splite_Site, percentage: 25.00%
type: Nonsense_Mutation, percentage: 25.00%
其中,result对象的结构为:
{
"m1": {
"Frame_Shit_del": 1,
"Messense_Mutation": 1,
"In_Frame_Del": 1
},
"m2": {
"Frame_Shit_del": 2,
"Splite_Site": 1,
"Nonsense_Mutation": 1
}
}
可以看到,result对象保存了每个name下每个type值出现的次数。通过遍历result对象,可以计算出每个type值所占的比例。
原文地址: http://www.cveoy.top/t/topic/XWt 著作权归作者所有。请勿转载和采集!