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

如何根据嵌套的day_id值过滤包含Hours数组的对象?

问题分析与解决

原始数据结构

"times": [{
  "id" : "id",
  "name" : "place",
  "location" : "place",
  "hours" : [
    {"day": "Sunday", "day_id": 0, "tags": "" },
    {"day": "Monday", "day_id": 1, "tags": "" },
    {"day": "Tuesday", "day_id": 2, "tags": "" },
    {"day": "Wednesday", "day_id": 3, "tags": "" },
    {"day": "Thursday", "day_id": 4, "tags": "" },
    {"day": "Friday", "day_id": 5, "tags": "" },
    {"day": "Saturday", "day_id": 6, "tags": "" }
  ]
}]

你的错误代码

let f1 = times.filter((item: { id: string; hours: { day_id : number;};}) => item.hours.day_id == 0 );

问题所在

  1. 类型定义错误:你把hours定义成了单个对象类型,但实际上它是一个对象数组,类型应该写成数组形式。
  2. 逻辑错误:直接访问item.hours.day_id无效——数组本身没有day_id属性,你需要遍历数组元素,判断是否存在符合条件的项。

修正后的代码

方式一:先定义清晰类型(更易维护)

// 定义子项类型
interface Hour {
  day: string;
  day_id: number;
  tags: string;
}

// 定义父项类型
interface TimeItem {
  id: string;
  name: string;
  location: string;
  hours: Hour[];
}

// 过滤逻辑:保留hours数组中包含day_id=0的项
let f1 = (times as TimeItem[]).filter(item => 
  item.hours.some(hour => hour.day_id === 0)
);

方式二:直接修正类型与逻辑(快速实现)

let f1 = times.filter((item: { id: string; hours: Array<{ day_id: number }>;}) => 
  item.hours.some(hour => hour.day_id === 0)
);

核心是用Array.some()方法判断hours数组中是否存在符合条件的元素——只要有一个元素满足day_id === 0,对应的父项就会被保留在过滤结果里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 11:07:00