如何使用嵌套值过滤数组?

问题描述 投票:0回答:1

我得到了一个包含对象的数组

"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 );

那没有用。我在这里做错了什么?

javascript arrays typescript
1个回答
-1
投票

如果将上面的代码包装在 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));
}
© www.soinside.com 2019 - 2024. All rights reserved.