如何在查询字符串中转换多维数组?

How to convert array multidimensional in query string?

我有以下数组,对象内部有多个数组,如何生成查询字符串,输出应该在哪里。

其中 servicesaccountTypes 例如是数组中的条目,它成为查询字符串中的键。

查询字符串中的值为每个数组中的id from 对象

输出应该是例如

services=10&services=30&accountTypes=20

数组

[
  {
    "services": [
      {
        "id": "10",
        "name": "PIX"
      },
      {
        "id": "30",
        "name": "Income"
      },
    ],
    "accountTypes": [
      {
        "id": "20",
        "name": "Digital Account"
      }
    ]
  }
]

我试过的功能 我尝试使用 encodeURIComponent 如下所示,但它正在生成 undefined

const params = initialFilterDataJson.map((param: QueryParamsType) => {
    return encodeURIComponent(param.key) + '=' + encodeURIComponent(param.id)
  })
  const queryString = params.join('&')

http://localhost:3000/api/accounts?undefined=undefined

您的代码在数据结构中的嵌套不够深。需要有嵌套循环,首先访问外层数组中的对象,然后访问这样一个对象的键(有对应的数组),然后再访问这样一个数组中的每个内部对象:

const initialFilterDataJson = [{"services": [{"id": "10","name": "PIX"},{"id": "30","name": "Income"},],"accountTypes": [{"id": "20","name": "Digital Account"}]}];

const queryString = initialFilterDataJson.flatMap((param) =>
    Object.entries(param).flatMap(([key, arr]) =>
        arr.map(({id}) => encodeURIComponent(key) + '=' + encodeURIComponent(id))
    )
).join('&');

console.log(queryString);   

旁注:某些网络服务器可以更好地处理查询字符串中带有 [] 后缀的重复键,例如 services[]=10&services[]=20.