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

AngularJS按月份拆分ISO日期格式JSON数组问题排查

问题分析与解决方案

你遇到的核心问题是变量赋值覆盖,以及没必要的嵌套forEach导致的重复处理。

问题根源

  1. 单个对象赋值覆盖:你当前代码里,vm.mai = vm.acoesAno[key];每次都会把遍历到的5月数据直接赋值给vm.mai,后面的5月数据会完全覆盖前面的,所以最后vm.mai只会保留最后一条5月记录,而非所有符合条件的数据。
  2. 嵌套forEach冗余:外层已经在遍历vm.acoesAno,内层又重复遍历一遍,这不仅做了无用功,还可能导致同一数据被多次处理,加重覆盖问题。

修复后的代码

我们把每个月份变量改成数组,初始化后用push添加对应月份的数据,同时去掉多余的嵌套循环:

.then(function(resp) {
  vm.acoesAno = resp.data;
  
  // 提前初始化每个月份的空数组,避免undefined问题
  vm.jan = [];
  vm.fev = [];
  vm.mar = [];
  vm.abr = [];
  vm.mai = [];
  vm.jun = [];
  vm.jul = [];
  vm.ago = [];
  vm.set = [];
  vm.out = [];
  vm.nov = [];
  vm.dez = [];

  // 仅需一层forEach遍历所有数据
  angular.forEach(vm.acoesAno, function(value) {
    const date = new Date(value.data);
    const mes = date.getMonth(); // 月份从0开始(0=1月,4=5月)
    
    switch(mes) {
      case 0: vm.jan.push(value); break;
      case 1: vm.fev.push(value); break;
      case 2: vm.mar.push(value); break;
      case 3: vm.abr.push(value); break;
      case 4: vm.mai.push(value); break;
      case 5: vm.jun.push(value); break;
      case 6: vm.jul.push(value); break;
      case 7: vm.ago.push(value); break;
      case 8: vm.set.push(value); break;
      case 9: vm.out.push(value); break;
      case 10: vm.nov.push(value); break;
      case 11: vm.dez.push(value); break;
    }
  });

  console.log("mes de maio: ", vm.mai); // 现在会输出所有5月数据组成的数组
})

关键改动说明

  • 初始化数组:提前给每个月份变量创建空数组,确保后续可以用push添加元素,而非覆盖单个对象。
  • 单层遍历:去掉内层冗余的forEach,只遍历一次vm.acoesAno,每条数据仅处理一次,效率更高。
  • 用push替代直接赋值:把符合月份条件的数据添加到对应数组中,所有同月份的数据都会被保留,不会被覆盖。
  • 改用switch语句:相比一堆if-else,代码更简洁易读,后期维护更方便。

效果验证

假设你的vm.acoesAno有两条5月的数据,执行后vm.mai会是一个包含这两个对象的数组,console.log会输出类似:

mes de maio:  [
  { "data" : "2018-05-06T03:00:00.000Z", "longitude" : "-52.018375", ... },
  { "data" : "2018-05-18T03:00:00.000Z", "longitude" : "-52.021450", ... }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:56:11