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

Angular 5迁移中如何用TypeScript遍历moment-range的by方法返回值?

解决moment-range在TypeScript(Angular 5/Ionic 3)中的遍历问题

我来帮你搞定这个迁移中的遍历问题!从原来的AngularJS/Ionic 1的JavaScript写法转到TypeScript后,moment-range的by()方法返回的是Iterable<moment.Moment>类型,不过有几种简单的方式来遍历它,完全可以替代原来的回调写法:

方法1:使用for...of循环(最符合TypeScript风格)

这是遍历Iterable对象最直接的方式,语法清晰且原生支持:

const range: momentRange.DateRange = new momentRange.DateRange(new Date(2018, 0, 11), new Date(2018, 11, 30));

for (const day of range.by('days')) {
  // 在这里处理每一天,比如格式化输出
  console.log(day.format('YYYY-MM-DD'));
  // 你的业务逻辑代码
}

方法2:转换为数组后使用forEach

如果习惯了数组的forEach方法,可以用Array.from()把Iterable转换成数组:

const range: momentRange.DateRange = new momentRange.DateRange(new Date(2018, 0, 11), new Date(2018, 11, 30));
const daysArray = Array.from(range.by('days'));

daysArray.forEach(day => {
  // 处理每一天的逻辑
  console.log(day.format('YYYY-MM-DD'));
});

方法3:沿用类似原JS的回调写法

其实moment-range的TypeScript定义里,by()方法还有支持回调的重载版本,你可以直接像原来那样写:

const range: momentRange.DateRange = new momentRange.DateRange(new Date(2018, 0, 11), new Date(2018, 11, 30));

range.by('days', (day) => {
  // 这里的处理逻辑和你原来的JS代码完全一致
  console.log(day.format('YYYY-MM-DD'));
});

这三种方法都能实现你原来的需求,选哪种取决于你的代码习惯~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:22:43