如何在JavaScript中按年份对对象数组的Count值求和?
按年份对Count值求和的JavaScript实现
嘿,这个需求完全不用手动写复杂的遍历判断,用JavaScript的内置reduce()方法就能轻松搞定!下面直接上解决方案,再一步步给你拆解:
完整代码示例
const data = [ { "id": { "extId": "112", "year": "2000" }, "Count": 1 }, { "id": { "extId": "113", "year": "2001" }, "Count": 446 }, { "id": { "extId": "115", "year": "2000" }, "Count": 742 }, // 你的其他数据项... ]; // 步骤1:用reduce按年份累加Count总和 const yearCountMap = data.reduce((accumulator, currentItem) => { const currentYear = currentItem.id.year; // 累加:如果年份不存在就初始化为0,再加上当前Count accumulator[currentYear] = (accumulator[currentYear] || 0) + currentItem.Count; return accumulator; }, {}); // 步骤2:转换为你想要的数组格式(每个年份对应一个单独对象) const finalResult = Object.entries(yearCountMap).map(([year, totalCount]) => ({ [year]: totalCount })); console.log(finalResult); // 输出结果:[{ '2000': 743 }, { '2001': 446 }, ...]
代码说明
- 第一步用
reduce():这是处理分组累加场景的核心方法。它会遍历数组的每一项,维护一个accumulator(累加器,这里初始是空对象)。每遍历一项,就取出年份,把对应的Count加到累加器的对应年份键上。 - 第二步转换格式:
reduce()得到的是一个{年份: 总和}的对象,如果你需要的是每个年份单独成一个对象的数组,就用Object.entries()把对象转成[年份, 总和]的二维数组,再用map()把每一组转成单独的对象。
额外小提示
如果后续操作不需要每个年份单独成对象,其实直接用yearCountMap这个键值对对象会更方便——比如你想快速获取2000年的总和,直接yearCountMap['2000']就能拿到,不用遍历数组~
内容的提问来源于stack exchange,提问作者Kim
相关产品推荐
相关产品推荐

