JavaScript 使用 reduce() 方法统计数组中相同 name 下不同 type 的数量
let arr = [ { name: 'm1', groupName: 'group1', type: 'Frame_Shit_del' }, { name: 'm1', groupName: 'group2', type: 'Messense_Mutation' }, { name: 'm1', groupName: 'group3', type: 'In_Frame_Del' }, { name: 'm2', groupName: 'group1', type: 'Frame_Shit_del', showValue: '444', value: 0.89, }, { name: 'm2', groupName: 'group3', type: 'Splite_Site', showValue: '555', value: 0.42, }, { name: 'm2', groupName: 'group3', type: 'Nonsense_Mutation', showValue: '666', value: 0.78, } ]
获取相同 name 里相同的 type 值,并算出每个 name 一共有多少个 type 内容:可以使用 reduce() 方法来实现:
const result = arr.reduce((acc, cur) => {
const key = cur.name + cur.type;
if (!acc[key]) {
acc[key] = {
name: cur.name,
type: cur.type,
count: 1
};
} else {
acc[key].count++;
}
return acc;
}, {});
console.log(Object.values(result));
输出:
[
{ name: 'm1', type: 'Frame_Shit_del', count: 1 },
{ name: 'm1', type: 'Messense_Mutation', count: 1 },
{ name: 'm1', type: 'In_Frame_Del', count: 1 },
{ name: 'm2', type: 'Frame_Shit_del', count: 1 },
{ name: 'm2', type: 'Splite_Site', count: 1 },
{ name: 'm2', type: 'Nonsense_Mutation', count: 1 }
]
解释:
首先使用 reduce() 方法遍历数组,将每个元素的 name 和 type 值拼接成一个字符串作为对象的 key。
如果当前 key 在累加器中不存在,则创建一个新的对象,其中 count 属性为 1;如果已存在,则将该对象的 count 属性加 1。
最后使用 Object.values() 方法将累加器中的所有对象转为数组并输出即可。
原文地址: https://www.cveoy.top/t/topic/milm 著作权归作者所有。请勿转载和采集!