如何使用filter()从ID列表中查找多个项目



我正试图通过基于ids列表的id属性获取多个项。要给出一个示例,请使用下面的函数。

findItems(idList: string[]){
let fetchedItems: SomeType[] = [];
idList.forEach(a=>{
fetchedItems.push(DATASOURCE.find(b=> b.id === a));
}
return fetchedItems;
}

正如您所看到的,此函数获取string的列表,并使用forEach()方法单独查找每个项目,并将其推送到fetchedItems数组,这意味着如果该列表中有10个项目,则将有10个对同一数据库的连续调用。

进一步探究这种好奇心,我突然想到filter()正是为了做这件事而设计的。我看了MDN上的文档,在谷歌上搜索了一下,但我想我不知道该专门搜索什么才能得到我需要研究的结果。有人能告诉我怎么做吗?

idList变成Set(为了降低计算复杂度(,然后可以通过id是否包含在集合中来在DATASOURCE上进行.filter

findItems(idList: string[]){
const ids = new Set(idList);
return DATASOURCE.filter(({ id }) => ids.has(id));
}

这假设DATASOURCE中没有多个具有重复ID的项目。

Set.has具有O(1)复杂度,而像.find(或.includes等(这样的阵列方法具有O(n)复杂度。

怎么样

findItems(idList: string[]){
return DATASOURCE.filter(data => idList.includes(data.id));
}

最新更新