¿Cómo encontrar el parámetro cuya clave es una matriz usando URLSearchParams ?
// Browser url: const url = http://localhost:4000/leads?status%5B0%5D=1&page=2; // What my code does: const urlParams = new URLSearchParams(window.location.search); const myParam = (urlParams.get('status%5B0%5D') || urlParams.get(key)) || ""; // Let's focus on the below myParam: urlParams.get('status%5B0%5D') // or urlParams.get('status[]') // or urlParams.has('status%5B0%5D') // or urlParams.has('status[]') // or urlParams.getAll('status%5B0%5D') // or urlParams.getAll('status[]') ...no tiene nada útil. El objetivo es eliminar una clave de la url. Las claves pueden ser una cadena, un status o una matriz, status%5B0%5D . Estoy escribiendo una función que puede encontrar la clave, ya sea una cadena o una matriz. ¿Cómo es que cualquier cosa que haga no tiene impacto? ¿Me estoy perdiendo de algo?
He mirado a continuación y nada funciona:
// Copyright (c) Microsoft Corporation. All rights reserved. // ... interface URLSearchParams { /** Appends a specified key/value pair as a new search parameter. */ append(name: string, value: string): void; /** Deletes the given search parameter, and its associated value, from the list of all search parameters. */ delete(name: string): void; /** Returns the first value associated to the given search parameter. */ get(name: string): string | null; /** Returns all the values association with a given search parameter. */ getAll(name: string): string[]; /** Returns a Boolean indicating if such a search parameter exists. */ has(name: string): boolean; /** Sets the value associated to a given search parameter to the given value. If there were several values, delete the others. */ set(name: string, value: string): void; sort(): void; /** Returns a string containing a query string suitable for use in a URL. Does not include the question mark. */ toString(): string; forEach(callbackfn: (value: string, key: string, parent: URLSearchParams) => void, thisArg?: any): void; }Si puede controlar la URL, puede escribir una URL como esta:
some-url?status=status1&status=status2&status=status3
Luego puede hacer .getAll('status') que devuelve una matriz.
Parece que tienes que decodificar el URI antes de usarlo
var url = new URL(decodeURI('http://localhost:4000/leads?status%5B0%5D=1&page=2;')); console.log(url.search); // '?status[0]=1&page=2;' console.log(url.searchParams.get('status[0]')) // '1' console.log(url.searchParams.getAll('status[0]')) // ['1'] Array.from(url.searchParams.entries()).forEach( console.log ) // ['status[0]', '1'] // ['page', '2;']