将数组传递到URLSearchParams,同时消耗对get请求的http调用

Mad*_*jan 23 angular2-http angular

通过URLSearchParams的Angular文档,我找到了关于将数组作为参数传递的任何文档.

任何人都可以帮忙吗?

Thi*_*ier 33

实际上,您无法直接传递数组,但可以多次使用该append方法:

let params = new URLSearchParams();
params.append('arrayparams', 'val1');
params.append('arrayparams', 'val2');
params.append('arrayparams', 'val3');
Run Code Online (Sandbox Code Playgroud)

  • 不,根据规范,同一键的多个实例自动是一个数组。 (4认同)
  • PHP 不会将同一个键的多个实例视为数组 (2认同)
  • Oneliner: `[].reduce((acc, cur) => { acc.append('arrayparams', cur); return acc; }, new URLSearchParams()).toString()` (2认同)
  • 更简单和简短的 URL 选项:(我在这个例子中添加了一个答案) `const url = new URL('http://localhost/') url.searchParams.append('date[0]', date1) url.searchParams.追加('日期[1]',日期2)console.log(url.toString())` (2认同)

ric*_*y89 16

如果你想使用@washington-braga的方法但不想安装lodash:

function buildParams(data) {
    const params = new URLSearchParams()

    Object.entries(data).forEach(([key, value]) => {
        if (Array.isArray(value)) {
            value.forEach(value => params.append(key, value.toString()))
        } else {
            params.append(key, value.toString())
        }
    });

    return params.toString()
}
Run Code Online (Sandbox Code Playgroud)


Gab*_*dez 8

事实上这是最简单的功能方式:

const url = new URL('http://localhost/')
url.searchParams.append('date[0]', date1)
url.searchParams.append('date[1]', date2)
console.log(url.toString())
Run Code Online (Sandbox Code Playgroud)

当然,您可以迭代数组。


nma*_*ise 6

URLSearchParams 可以传递一对序列,因此有一个值数组:

var ids = [1,2,3,4]
var search = new URLSearchParams(ids.map(s=>['id',s]))
var searchString = search.toString()
// "id=1&id=2&id=3&id=4"
Run Code Online (Sandbox Code Playgroud)
// To get the ids from the URL search string
var search_ids = [...search.getAll('id')]
Run Code Online (Sandbox Code Playgroud)