Quiero pasar este objeto a los parámetros de búsqueda de URL:
const obj = { mb_brand: car.base, mb_factor: car.factor, mb_type: car.type }Tengo función para establecer parámetros:
const setQuery = (key, value) => { let obj_url = new URL(window.location.href); let params = obj_url.searchParams; params.set(key, value); Router.push({ pathname: obj_url.pathname, search: obj_url.search }); }Y lo que probé hasta ahora es:
for(let i = 0 ; i < Object.keys(obj).length ; i++){ setQuery(Object.keys(obj)[i], Object.values(obj)[i]) }Pero solo establece 1 parámetro, no 3.
const obj = { mb_brand: 'blah', mb_factor: 'blah', mb_type: 'blah' } const setQuery = (key, value) => { let obj_url = new URL(window.location.href); let params = obj_url.searchParams; params.set(key, value); /*Router.push({ pathname: obj_url.pathname, search: obj_url.search });*/ console.log(obj_url.search) } for (let i = 0; i < Object.keys(obj).length; i++) { setQuery(Object.keys(obj)[i], Object.values(obj)[i]) }Pero estableció solo el último parámetro.
Quiero ver este resultado en url:
localhost/index?mb_brand=blah&mb_factor=blah&?mb_type=blah
Está definiendo su variable de params una y otra vez porque se está llamando a setQuery dentro de un bucle y sobrescribiendo el parámetro de consulta anterior. Por lo tanto, solo está disponible el último parámetro. Defina estas variables fuera de searchQuery , de modo que el ciclo for pueda agregar los parámetros a la misma variable.
const obj = { mb_brand: 'blah', mb_factor: 'blah', mb_type: 'blah' } let obj_url = new URL(window.location.href); let params = obj_url.searchParams; const setQuery = (key, value) => { params.set(key, value); // console.log(obj_url.search) } for (let i = 0; i < Object.keys(obj).length; i++) { setQuery(Object.keys(obj)[i], Object.values(obj)[i]) } /*Router.push({ pathname: obj_url.pathname, search: obj_url.search });*/ console.log(params.toString());Salida de la consola:
mb_brand=blah&mb_factor=blah&mb_type=blahPuede crear directamente parámetros de búsqueda a partir de un objeto, consulte https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams :
// Search parameters can also be an object const paramsObj = {foo: 'bar', baz: 'bar'}; const searchParams = new URLSearchParams(paramsObj); searchParams.toString(); // "foo=bar&baz=bar" searchParams.has('foo'); // true searchParams.get('foo');