Ryuno-Ki: URLSearchParams filtern

Beitrag lesen

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);
}