Generatoren bieten sich vor allem dann an, wenn das zu iterierende Objekt „groß” wird.
Für das Beispiel hier geht es auch einfacher:
const url = 'https://example.net?a=1&b=2&c=3&pre_d=4&pre_e=5';
const urlObject = new URL(url);
const searchParams = urlObject.searchParams;
const results = Array.from(searchParams).filter(([key]) => key.startsWith('pre_'));
console.log('result', results);
Dabei habe ich aus dem URLSearchParams erst einmal ein Array gemacht (Array.from()
), welches anschließend gefiltert wurde. [key]
nutzt dabei destructuring assignment zum Auspacken (ohne auf ein Rest-Parameter einzugehen).
Das Ergebnis wird wie im Beispiel ausgegeben.
Persönlich würde ich es wohl noch in eine Funktion geben, die die url
und das Präfix entgegennimmt und passende Query-Parameter zurückgibt:
const url = 'https://example.net?a=1&b=2&c=3&pre_d=4&pre_e=5';
const filteredSearchParams = filterUrlSearchParamsByPrefix(url, 'pre_');
console.log(filteredSearchParams.toString());
function filterUrlSearchParamsByPrefix(url, prefix) {
const urlObject = new URL(url);
const results = Array
.from(urlObject.searchParams)
.filter(([key]) => key.startsWith(prefix));
return new URLSearchParams(results);
}