字符串不完全相等时如何匹配,实现带路径前缀的文件名筛选需求
数组按文件名匹配筛选的调整方案
你当前代码的问题是Array.includes()为全字符串匹配,names数组中的元素携带路径前缀,无法直接和materials中存储的纯文件名匹配,因此无法筛选出目标结果。
高效实现方案(推荐)
提前将names数组中的路径统一处理为纯文件名存入Set,后续匹配的时间复杂度为O(1),适合names数据量较大的场景:
const names = ['h2/rea.jpg'] const materials = [{ name: 'hgb.jpg' }, { name: 'rea.jpg' }, { name: 'ca.png' }] // 提取所有路径的纯文件名存入Set const pureFileNameSet = new Set(names.map(path => path.split('/').pop())) const res = materials.filter(item => pureFileNameSet.has(item.name)) console.log('RES', res) // 输出符合预期的 [ {name: 'rea.jpg'} ]
轻量实现方案
如果names数据量很小,也可以直接在筛选逻辑中做后缀匹配,同时兼容names中存在纯文件名的场景:
const res = materials.filter(item => { // 匹配规则:路径以`/文件名`结尾,或者路径本身就是文件名 return names.some(path => path.endsWith(`/${item.name}`) || path === item.name) })
内容的提问来源于stack exchange,提问作者bruce lee
相关产品推荐
相关产品推荐

