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

如何在if else语句中移除数组元素并简化Angular时分选择逻辑

问题描述

需求:

  • 选择0小时时,仅显示15、30、45分钟选项
  • 选择1、2、3、4小时时,显示0、15、30、45分钟选项

现有代码存在冗余的if else逻辑,希望简化并复用ngOnInit中初始化的minuteOptions数组,仅在选中0小时时移除其中的0选项。

待简化的if else代码

onHourChange(hours: number) {
  if (hours === 0) {
    this.minuteOptions = [
      { value: 15, display: '15' },
      { value: 30, display: '30' },
      { value: 45, display: '45' },
    ]
  } else if (hours === 1) {
    this.minuteOptions = [
      { value: 0, display: '00' },
      { value: 15, display: '15' },
      { value: 30, display: '30' },
      { value: 45, display: '45' },
    ];
  }
}

初始化数组代码

ngOnInit() {
  this.hourOptions = [
    { value: 0, display: '0' },
    { value: 1, display: '1' },
    { value: 2, display: '2' },
    { value: 3, display: '3' },
    { value: 4, display: '4' },
  ];
  this.minuteOptions = [
    { value: 0, display: '00' },
    { value: 15, display: '15' },
    { value: 30, display: '30' },
    { value: 45, display: '45' },
  ];
}
简化方案

方案一:基于初始化数组直接过滤

直接利用已初始化的完整分钟数组做过滤,避免重复定义数组:

onHourChange(hours: number) {
  // 小时为0时过滤掉value=0的选项,否则返回完整数组(解构避免引用问题)
  this.minuteOptions = hours === 0 
    ? this.minuteOptions.filter(item => item.value !== 0)
    : [...this.minuteOptions];
}

方案二:用常量存储原始数据源(更稳妥)

把完整的分钟选项定义为常量,确保每次操作都基于原始数据,避免意外修改:

// 组件类内定义常量存储完整分钟选项
private readonly FULL_MINUTE_OPTIONS = [
  { value: 0, display: '00' },
  { value: 15, display: '15' },
  { value: 30, display: '30' },
  { value: 45, display: '45' },
];

ngOnInit() {
  this.hourOptions = [
    { value: 0, display: '0' },
    { value: 1, display: '1' },
    { value: 2, display: '2' },
    { value: 3, display: '3' },
    { value: 4, display: '4' },
  ];
  this.minuteOptions = [...this.FULL_MINUTE_OPTIONS];
}

onHourChange(hours: number) {
  this.minuteOptions = hours === 0 
    ? this.FULL_MINUTE_OPTIONS.filter(item => item.value !== 0)
    : [...this.FULL_MINUTE_OPTIONS];
}

简化优势

  • 消除冗余的数组重复定义,所有分钟选项基于同一数据源维护
  • 逻辑清晰,仅通过过滤操作实现需求
  • 修复了原代码未处理2、3、4小时的遗漏问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 16:48:35