根据内部键过滤出一个对象数组并返回一个带有初始对象的新数组

时间:2021-06-16 13:00:02

标签: javascript arrays ecmascript-6 filter momentjs

我有一个这样的嵌套对象数组

[
    {
        id: "12",
        milestones: [
            { id: "1", dueDate: "2021-06-11T10:41:27.140Z", donation: 89.99 },
            { id: "2", dueDate: "2021-06-13T08:45:49.101Z", donation: 0 },
            { id: "3", dueDate: "2021-11-18T06:25:56.000Z", donation: 0 }
        ],
        title: "Project 1"
    }, {
        id: "13",
        milestones: [
            { id: "4", dueDate: "2021-11-29T10:26:06.000Z", donation: 29 }
        ],
        title: "Project 2"
    }
]

这里有 2 个项目,每个项目分别包含 3 个和 1 个里程碑。我希望根据里程碑的截止日期键过滤项目数组并将其转发,以便我可以过滤项目的表。现在我的下拉组件传递一个字符串,如“Q1 2020”或“Q3 2021”。在下面的工作中,我试图过滤出截止日期(转换为季度号)与下拉组件中的值匹配的项目数组。

const handleQuarterChange = (quarterValue) => {
    filteredProjects = projects.map(project => project.milestones.filter(milestone => {
        const quarterNum = moment(milestone.dueDate).quarter()
        const year = moment(milestone.dueDate).format('YYYY')
        return `Q${quarterNum} ${year}` === quarterValue;
    }))
    return filtredProjects;
  };

发生的事情是我得到了一系列经过过滤的里程碑,而不是项目。

1 个答案:

答案 0 :(得分:0)

我所要做的就是在一个数组中的里程碑下将 DueDate 分组并将其展平。它是通过链接高阶函数映射、过滤然后展平它来完成的。 所以,结果数组变成了

['Q1 2020', 'Q2 2021', 'Q3 2022']

感谢关于 discord 的 reactiflux 社区。