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() 方法将累加器中的所有对象转为数组并输出即可。

JavaScript 使用 reduce() 方法统计数组中相同 name 下不同 type 的数量

原文地址: https://www.cveoy.top/t/topic/milm 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录