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

JavaScript中如何添加属性键值不覆盖?Blogger归档系统开发问题

解决Blogger API归档系统中同一年份月份被覆盖的问题

你遇到的问题很典型——每次循环都直接用archive[key] = { [NameOfMonth]: 1 }覆盖了同一年份的已有数据,导致最后只留下该年度最后一个处理的月份。要保留所有月份,我们需要先判断当前年份是否已经存在于archive对象中,再决定是创建新的年份对象还是往已有对象里添加月份。

修改后的代码

var archive = {};
if ("entry" in TotalFeed.feed) {
  var PostEntries = TotalFeed.feed.entry.length;
  for (var PostNum = 0; PostNum < PostEntries; PostNum++) {
    var ThisPost = TotalFeed.feed.entry[PostNum];
    var key = ThisPost.published.$t.substring(0, 4);
    var MonthNames = ["January","February","March","April","May","June","July","August","September","October","November","December"];
    var m = ThisPost.published.$t.substring(5, 7);
    var NameOfMonth = MonthNames[parseInt(m)-1];
    
    // 关键改动:先检查年份是否已存在
    if (!archive[key]) {
      // 如果年份不存在,初始化一个空对象
      archive[key] = {};
    }
    // 如果该月份已存在,计数+1;否则初始化为1
    if (archive[key][NameOfMonth]) {
      archive[key][NameOfMonth]++;
    } else {
      archive[key][NameOfMonth] = 1;
    }
  }
}
console.log(archive);

代码解释

  1. 检查年份是否存在:if (!archive[key])判断当前年份对应的键是否在archive里,如果不存在就创建一个空对象,这样后续的月份可以添加进去,不会被覆盖。
  2. 处理月份计数:对于每个月份,先检查它是否已经在对应年份的对象里,如果存在就把计数加1(支持同月份多篇文章的统计),不存在就初始化为1。

这样修改后,archive对象会完整保留每一年的所有有文章的月份,比如2011年如果有May和June的文章,就会显示为2011: {May: 1, June: 2}(假设June有2篇)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:10:22