如何高效对大型对象数组中各键对应的值求和?
如何高效对大型对象数组中各键对应的值求和?
看起来你现在的方法在处理大数据集时有点吃力,这很正常——因为你目前的思路是对每个要统计的键都完整遍历一遍整个数组,相当于做了很多重复的遍历工作,数据量一大就会变慢。
其实我们只需要遍历一次整个数据集,在遍历过程中直接累加每个键的值就可以了,这样效率会高很多,时间复杂度从原来的O(K*N)降到O(N)(K是键的数量,N是数组长度)。
优化后的代码
// 初始化一个空对象用来存储各键的总和 const totalSum = {}; // 只遍历一次数据数组 for (const item of data) { // 遍历当前对象的所有键值对 for (const [key, value] of Object.entries(item)) { // 累加值:如果键已存在就加当前值,不存在则初始化为0再加当前值 totalSum[key] = (totalSum[key] || 0) + value; } } console.log(totalSum);
代码逻辑说明
- 先创建空对象
totalSum,用来最终存储每个键的累加结果。 - 用
for...of遍历整个data数组,每个循环处理一个对象item。 - 通过
Object.entries(item)把当前对象转换成键值对数组,再逐个处理这些键值对。 - 对每个键
key,判断它是否已经在totalSum中:存在就直接累加当前值,不存在则用0作为初始值再加上当前值,完成初始化。
这种方法只需要遍历一次数组,每个对象的键值对也只处理一次,在大数据集下的运行效率会比你原来的方法提升非常明显,你可以用自己生成的大型测试数据对比测试一下。
备注:内容来源于stack exchange,提问作者AndreasM
相关产品推荐
相关产品推荐

