我得到了一个包含对象的数组
"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": "" }
]
}
]
我正在尝试过滤到对象内的 Hours 数组。
我正在尝试在小时数组中查找包含特定day_id的对象。
我试过了
let f1 = times.filter((item: { id: string; hours: { day_id : number;};}) => item.hours.day_id == 0 );
那没有用。我在这里做错了什么?
如果将上面的代码包装在 JSON 对象中,如下所示:
const arr = {
"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": "" }
]
}
]
};
您可以编写一个函数来按 day_id 过滤小时子数组,如下所示:
function filterHoursByDayId(arr, dayId) {
return arr.times.map(item => ({
...item,
hours: item.hours.filter(hour => hour.day_id === dayId)
}));
}
请注意,这实际上只是从小时子数组中提取一个条目,而其他所有内容均保持不变。如果要过滤 times 数组中的对象,可以使用以下内容:
function filterTimesByDayId(arr, dayId) {
return arr.times.filter(item => item.hours.some(hour => hour.day_id === dayId));
}