如何更高效计算对象数组中出现次数最多的total值?
找出出现次数最多的total值及代码优化
给定如下对象数组:
const objects = [{ total: 2 }, { total: 5 }, { total: 1 }, { total: 8 },{ total: 2 },{ total: 3 },{ total: 8 },{ total: 1 },{ total: 2 }];
需要计算其中出现次数最多的total值(本例中为2),并优化现有实现代码的效率。
原实现分析
原代码通过两步完成任务:
- 用
reduce遍历数组,统计每个total的出现频率并存入对象 - 遍历频率对象,找出出现次数最多的
total值
这种实现需要两次完整遍历,对于大数据量的数组,会额外增加时间开销。
优化后的实现
我们可以将统计频率和跟踪最大值的操作合并到一次遍历中,同时完成两个任务,提升执行效率:
function findTotalWithMostInstances(arr) { let frequencyMap = {}; let maxCount = 0; let result; for (const obj of arr) { const total = obj.total; // 更新当前total的出现次数 frequencyMap[total] = (frequencyMap[total] || 0) + 1; // 实时比较并更新最大值对应的total if (frequencyMap[total] > maxCount) { maxCount = frequencyMap[total]; result = total; } } return result; }
优化点说明
- 减少遍历次数:从两次遍历缩减为一次,直接在统计频率的同时跟踪当前出现次数最多的值,降低时间开销
- 避免类型转换:原代码最后需要用
parseInt转换结果,优化后的代码直接保留原始数值类型,无需额外转换 - 逻辑更紧凑:所有操作在同一个循环内完成,代码可读性和执行效率都有提升
测试调用:
console.log(findTotalWithMostInstances(objects)); // 输出:2
内容的提问来源于stack exchange,提问作者easdsa
相关产品推荐
相关产品推荐

