/** 去掉 search 和 hash 部分 */ export function mapHrefToPath(href: string | undefined): string { if (!href) return ''; return href.split('#')?.[0].split('?')?.[0] || href; } /** 去掉 search 和 hash 部分,但保留 search 中 q 字段(若有) */ export function mapHrefToPathWithOneSearchKey(href: string | undefined, q: string): string { if (!href) return ''; const url = new URL(href); const qv = url.searchParams.get(q); if (qv) { return `${mapHrefToPath(href)}?${q}=${qv}`; } return mapHrefToPath(href); } /** 去掉 search 和 hash 部分,但按 qs 顺序保留 search 中 qs 字段(若有) */ export function mapHrefToPathWithMultiSearchKey(href: string | undefined, qs: string[]): string { if (!href) return ''; const url = new URL(href); const qkv: [string, string][] = []; qs.forEach((q) => { const qv = url.searchParams.get(q); if (qv) { qkv.push([q, qv]); } }); if (qkv.length) { return `${mapHrefToPath(href)}?${qkv.map(([k, v]) => `${k}=${v}`).join('&')}`; } return mapHrefToPath(href); }