我正在使用动态过滤实现research_projects
列表。我在数据库中有一堆表,表示与principal investigator
和funder
等字段的多对多关系。
因为我希望过滤是动态的,所以我将所有这些数据预先提取并存储在浏览器中,然后使用javascript过滤该数据。
目前,我提取的数据具有以下结构:
research_projects =
{
"RPGUID1":
{
"title":"blah",
"summary":"balh",
"description":"blah",
etc...
},
"RPGUID2":
{
"title":"blah2",
etc...
},
...
}
principal_investigators =
{
"12345":
{
"name":"John D",
"slug":"john-d",
"research_projects":["RPGUID2"]
},
...
}
funders =
{
"aaaa":
{
"name":"funder A",
"slug":"funder-a",
"research_projects":["RPGUID1", "RPGUID2"]
},
...
}
我选择这种安排是为了避免在线性时间内搜索主research_projects
数组。
虽然这种结构可以单独进行过滤,但对于我想要的其他功能来说效率相当低。
下面是功能列表,以及它们在当前结构中的时间复杂度。我需要以尽可能多的优化这些函数的方式重构这些数据:
title
的{{1}}给定research_project
id
的所有research_projects
funder
funder[research_projects]
的所有funder
research_project
和 funders
funders[research_projects]
的{{1}}给定slug
funder
的{{1}}给定id
id
每当用户选择新过滤器时,所有这些功能都需要多次运行 ,这就是我寻找替代解决方案的原因。
由于