遍历具有嵌套数组的对象数组以确定所需的结果

Iterating through an array of objects with nested array to determine required result

给定以下对象结构数组,我需要一种扫描此数组中所有对象元素的方法,即从星期一到星期日,并且 return如果至少一个条目具有以下条件,则输入一个布尔值 (true):

weeklyFlag 设置为 true 并且 weeklyStartTimeweeklyEndTime 都不为空 - 具有针对它们的日期值。

在下面的数据中,星期一的 weeklyFlag 设置为真,但其他数据不是,而星期二具有 return 真实结果所需的所有条件。

最后,我只需要检查一个对象就可以拥有所有数据集。

正在查看嵌套的 for 循环,但不确定是否可以使用数组 mapfilter

let weeklyTimes = [
                    {
                        "day": "Monday",
                        "startEnd": [
                            {
                                "weeklyFlag": true,
                                "weeklyStartTime": null,
                                "weeklyEndTime": null
                            }
                        ]
                    },
                    {
                        "day": "Tuesday",
                        "startEnd": [
                            {
                                "weeklyFlag": true,
                                "weeklyStartTime": "2021-08-08T14:00:00.000Z",
                                "weeklyEndTime": "2021-08-08T15:00:00.000Z"
                            }
                        ]
                    },
                    {
                        "day": "Wednesday",
                        "startEnd": [
                            {
                                "weeklyFlag": false,
                                "weeklyStartTime": null,
                                "weeklyEndTime": null
                            }
                        ]
                    },
                    {
                        "day": "Thursday",
                        "startEnd": [
                            {
                                "weeklyFlag": false,
                                "weeklyStartTime": null,
                                "weeklyEndTime": null
                            }
                        ]
                    },
                    {
                        "day": "Friday",
                        "startEnd": [
                            {
                                "weeklyFlag": false,
                                "weeklyStartTime": null,
                                "weeklyEndTime": null
                            }
                        ]
                    },
                    {
                        "day": "Saturday",
                        "startEnd": [
                            {
                                "weeklyFlag": false,
                                "weeklyStartTime": null,
                                "weeklyEndTime": null
                            }
                        ]
                    },
                    {
                        "day": "Sunday",
                        "startEnd": [
                            {
                                "weeklyFlag": false,
                                "weeklyStartTime": null,
                                "weeklyEndTime": null
                            }
                        ]
                    }

您可以使用Array.filter()过滤数据,如下所示。

顺便说一句,startEnd 属性可能是一个对象而不是数组,因为它只有 1 个项目。

let weeklyTimes = [{ "day": "Monday", "startEnd": [{ "weeklyFlag": true, "weeklyStartTime": null, "weeklyEndTime": null }] }, { "day": "Tuesday", "startEnd": [{ "weeklyFlag": true, "weeklyStartTime": "2021-08-08T14:00:00.000Z", "weeklyEndTime": "2021-08-08T15:00:00.000Z" }] }, { "day": "Wednesday", "startEnd": [{ "weeklyFlag": false, "weeklyStartTime": null, "weeklyEndTime": null }] }, { "day": "Thursday", "startEnd": [{ "weeklyFlag": false, "weeklyStartTime": null, "weeklyEndTime": null }] }, { "day": "Friday", "startEnd": [{ "weeklyFlag": false, "weeklyStartTime": null, "weeklyEndTime": null }] }, { "day": "Saturday", "startEnd": [{ "weeklyFlag": false, "weeklyStartTime": null, "weeklyEndTime": null }] }, { "day": "Sunday", "startEnd": [{ "weeklyFlag": false, "weeklyStartTime": null, "weeklyEndTime": null }] }]

const filteredData = weeklyTimes.filter((day) =>
  day.startEnd[0].weeklyFlag
  && day.startEnd[0].weeklyStartTime
  && day.startEnd[0].weeklyEndTime)

console.log(filteredData)


或者如果您只想退回 1 件商品,您可以使用 Array.find()

let weeklyTimes = [{ "day": "Monday", "startEnd": [{ "weeklyFlag": true, "weeklyStartTime": null, "weeklyEndTime": null }] }, { "day": "Tuesday", "startEnd": [{ "weeklyFlag": true, "weeklyStartTime": "2021-08-08T14:00:00.000Z", "weeklyEndTime": "2021-08-08T15:00:00.000Z" }] }, { "day": "Wednesday", "startEnd": [{ "weeklyFlag": false, "weeklyStartTime": null, "weeklyEndTime": null }] }, { "day": "Thursday", "startEnd": [{ "weeklyFlag": false, "weeklyStartTime": null, "weeklyEndTime": null }] }, { "day": "Friday", "startEnd": [{ "weeklyFlag": false, "weeklyStartTime": null, "weeklyEndTime": null }] }, { "day": "Saturday", "startEnd": [{ "weeklyFlag": false, "weeklyStartTime": null, "weeklyEndTime": null }] }, { "day": "Sunday", "startEnd": [{ "weeklyFlag": false, "weeklyStartTime": null, "weeklyEndTime": null }] }]

const filteredData = weeklyTimes.find((day) =>
  day.startEnd[0].weeklyFlag
  && day.startEnd[0].weeklyStartTime
  && day.startEnd[0].weeklyEndTime)

console.log(filteredData)