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

如何基于多条件过滤数组?根据start_date、end_date筛选对应状态数据

Vue 多条件数组过滤实现方案

你可以通过计算属性实现三个复选框的组合过滤,完整逻辑如下:

1. 过滤逻辑说明

首先统一将日期转为时间戳比较,避免格式误差,三条状态的判断逻辑采用常规业务语义(若需要和你描述的原始条件一致可自行调整判断规则):

  • future:start_date晚于当前时间,对应未开始的条目
  • past:end_date早于当前时间,对应已结束的条目
  • in_progress:start_date早等于当前时间且end_date晚等于当前时间,对应进行中的条目

2. 核心代码实现

计算属性添加

在Vue实例中添加filteredItems计算属性:

computed: {
  filteredItems() {
    const currentTime = Date.now()
    return this.items.filter(item => {
      const startTime = new Date(item.start_date).getTime()
      const endTime = new Date(item.end_date).getTime()

      const isFuture = startTime > currentTime
      const isPast = endTime < currentTime
      const isInProgress = startTime <= currentTime && endTime >= currentTime

      // 只要对应状态的复选框勾选,就保留该条目
      return (this.future && isFuture) || (this.past && isPast) || (this.in_progress && isInProgress)
    })
  }
}

视图绑定

直接遍历过滤后的计算属性渲染列表即可:

<!-- 原有复选框代码 -->
<input v-model="future" type="checkbox" /> 显示未开始
<input v-model="past" type="checkbox" /> 显示已结束
<input v-model="in_progress" type="checkbox"/> 显示进行中

<!-- 过滤后的列表 -->
<ul>
  <li v-for="item in filteredItems" :key="item.id">
    名称:{{item.name}},开始时间:{{item.start_date}},结束时间:{{item.end_date}}
  </li>
</ul>

3. 注意事项

你提供的data中start_date和end_date字段多了一层重复的双引号,需要修正为单组双引号的ISO字符串格式,否则日期转换会失败,修正示例:

items: [
  {
    "name":"Test",
    "start_date":"2022-01-01T07:00:00-08:00",
    "end_date":"2022-03-01T07:00:00-08:00",
    "id":"2asfa3r9adsgu83yf83"
  },
  // 其余条目同理去掉多余双引号即可
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:57:04