如何在不循环的情况下添加 JavaScript 对象作为 URL 的 searchParams

Zac*_*ché 4 javascript url

假设我有一些数据:

let data = { a: 1, b: 2, c: 3}
Run Code Online (Sandbox Code Playgroud)

我想将该数据添加到现有 URL:

const url = new URL('https://www.mywebsite.com')
Run Code Online (Sandbox Code Playgroud)

我想将对象的所有键和值参数设置为该 URL,而searchParams无需直接set设置append每个项目。我想将整个事情设置为 searchParams。

我只想以某种方式将其传递/替换现有的搜索参数。我希望事情是这样的:

const params = new URLSearchParams(data)
url.searchParams = params
Run Code Online (Sandbox Code Playgroud)

或以某种方式

url.searchParams.set(data) // or .append(data)
Run Code Online (Sandbox Code Playgroud)

当然,这些都不起作用。

我不想经历for of循环Object.entries(data),但我没有看到其他方法,我希望我只是还没有找到它。

有没有一种简单的方法可以将对象中的多个键值对/数据设置到 URL 的搜索参数中以构建新的 URL?

期望的结果:

url.toString() // https://www.mywebsite.com/?a=1&b=2&c=3
Run Code Online (Sandbox Code Playgroud)

Zac*_*ché 7

这是我找到的最接近答案的东西,而且它有效。

URL将您的重新分配.search给 的String版本URLSearchParams,如下所示:

const url = new URL('https://www.example.com')
const data = { a: 1, b: 2, c: 3 }
const params = new URLSearchParams(data)
url.search = params.toString()  // Convert params to a string and add them to url search
Run Code Online (Sandbox Code Playgroud)

结果:

console.log(url.toString())  // https://www.example.com/?a=1&b=2&c=3
Run Code Online (Sandbox Code Playgroud)

完全有效!


干净的小功能(^-^)

console.log(url.toString())  // https://www.example.com/?a=1&b=2&c=3
Run Code Online (Sandbox Code Playgroud)