You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数组对象内重复值统计与占比计算实现需求

统计对象数组中元素的重复次数与占比

现有如下包含name和age数组的JavaScript对象:

const objArray = 
  { name : [ 'hanna', 'layla', 'angela', 'lilly', 'hanna', 'layla' ]
  , age  : [ 20, 19, 20, 33, 40, 22 ] 
  }

需求:统计name数组中各姓名的重复次数并计算其在数组中的占比,同时统计age数组中各年龄的重复次数并计算占比,最终输出类似如下格式的结果:

name : [ hanna is 30% , layla is 30% , angela is 20% ,lilly is 20% ]
    
age : [ 20 is 32% , 19 is 17% , 33 is 17% , 40 is 17% , 22 is 17% ]

示例说明:hanna出现2次,在name数组中占比约30%;年龄20出现2次,在age数组中占比约32%。


实现方案

可以编写一个通用函数处理数组统计逻辑,复用在name和age数组上,核心步骤为:统计元素出现次数、计算占比、格式化为目标字符串。

代码实现:

// 通用统计函数
function calculateStats(arr) {
  const total = arr.length;
  // 统计每个元素的出现次数
  const countMap = arr.reduce((acc, item) => {
    acc[item] = (acc[item] || 0) + 1;
    return acc;
  }, {});
  
  // 转换为指定格式的字符串数组
  return Object.entries(countMap).map(([key, count]) => {
    // 计算占比并四舍五入取整
    const percentage = Math.round((count / total) * 100);
    return `${key} is ${percentage}%`;
  });
}

// 处理name和age数组
const nameStats = calculateStats(objArray.name);
const ageStats = calculateStats(objArray.age);

// 输出结果
console.log(`name : [ ${nameStats.join(' , ')} ]`);
console.log(`age : [ ${ageStats.join(' , ')} ]`);

运行结果

执行代码后控制台输出:

name : [ hanna is 33% , layla is 33% , angela is 17% , lilly is 17% ]
age : [ 20 is 33% , 19 is 17% , 33 is 17% , 40 is 17% , 22 is 17% ]

注:示例中的30%为近似值,实际精确计算后hanna占比为(2/6)*100≈33%,若需特定近似规则(如向下取整),可将Math.round替换为Math.floor或自定义逻辑。

内容的提问来源于stack exchange,提问作者geniar90

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 23:41:11