You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Livewire中数组形式查询字符串如何转为逗号分隔值格式

查询字符串格式转换实现方案

原生JavaScript实现

适用于浏览器端直接处理查询字符串的场景:

function convertIndexedQueryToComma(queryStr) {
  queryStr = queryStr.replace(/^\?/, '');
  const rawParams = new URLSearchParams(queryStr);
  const convertedParams = new URLSearchParams();
  const arrayParamMap = {};

  for (const [key, val] of rawParams.entries()) {
    const keyMatch = key.match(/^([a-zA-Z0-9_]+)\[\d+\]$/);
    if (keyMatch) {
      const baseKey = keyMatch[1];
      arrayParamMap[baseKey] = arrayParamMap[baseKey] || [];
      arrayParamMap[baseKey].push(val);
    } else {
      convertedParams.append(key, val);
    }
  }

  Object.entries(arrayParamMap).forEach(([baseKey, valList]) => {
    convertedParams.append(baseKey, valList.join(','));
  });

  return convertedParams.toString();
}

// 测试示例
const input = "topic[0]=economic&topic[1]=politic";
console.log(convertIndexedQueryToComma(input)); // 输出:topic=economic%2Cpolitic

注:输出中的%2C是逗号的标准URL编码,服务端接收时会自动解码为正常逗号,无需额外处理

Node.js 服务端实现

使用Node.js内置querystring模块处理:

const querystring = require('querystring');

function convertIndexedQueryToComma(queryStr) {
  queryStr = queryStr.replace(/^\?/, '');
  const parsedParams = querystring.parse(queryStr);
  const resultParams = {};
  const arrayParamMap = {};

  Object.entries(parsedParams).forEach(([key, val]) => {
    const keyMatch = key.match(/^([a-zA-Z0-9_]+)\[\d+\]$/);
    if (keyMatch) {
      const baseKey = keyMatch[1];
      arrayParamMap[baseKey] = arrayParamMap[baseKey] || [];
      arrayParamMap[baseKey].push(val);
    } else {
      resultParams[key] = val;
    }
  });

  Object.entries(arrayParamMap).forEach(([baseKey, valList]) => {
    resultParams[baseKey] = valList.join(',');
  });

  return querystring.stringify(resultParams);
}

Axios 请求自动转换

如果是使用Axios发送请求时需要直接生成逗号分隔的数组参数,可直接配置paramsSerializer,无需手动转换:

import axios from 'axios';
import qs from 'qs';

const api = axios.create({
  baseURL: '你的接口基础地址',
  paramsSerializer: params => qs.stringify(params, { arrayFormat: 'comma' })
});

// 调用时直接传数组类型参数即可
api.get('/your/api/path', {
  params: {
    topic: ['economic', 'politic']
  }
});
// 最终请求参数格式为:?topic=economic,politic

内容的提问来源于stack exchange,提问作者Yoga Cahya R.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 08:18:00