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

如何从URL查询参数生成指定格式的数组?

实现URL查询参数到指定数组格式的转换

处理解析后的查询参数对象

如果已经有了解析好的urlObj,直接遍历对象的键值对,将每个值按逗号拆分后生成目标数组元素即可:

const urlObj = { cat_id: "18,20,24", color_id: "4" };
const filteredItems = [];

// 遍历对象的键值对
for (const [queryKey, valueStr] of Object.entries(urlObj)) {
  // 把逗号分隔的字符串拆分成单个值的数组
  const values = valueStr.split(',');
  // 逐个生成目标对象并加入结果数组
  values.forEach(value => {
    filteredItems.push({ value, queryKey });
  });
}

console.log(filteredItems);

处理URL查询参数字符串

如果输入是原始的查询字符串,需要先将其解析为对象,再复用上面的逻辑:

const query = "cat_id=18%2C20%2C24&color_id=4";
// 使用URLSearchParams解析字符串
const params = new URLSearchParams(query);
// 转换为普通对象
const urlObj = Object.fromEntries(params);

// 后续逻辑和处理对象的代码一致
const filteredItems = [];
for (const [queryKey, valueStr] of Object.entries(urlObj)) {
  const values = valueStr.split(',');
  values.forEach(value => {
    filteredItems.push({ value, queryKey });
  });
}

console.log(filteredItems);

封装成通用函数

可以把逻辑封装成函数,同时支持字符串和对象两种输入:

function convertQueryToFilteredItems(input) {
  let urlObj;
  // 判断输入类型并处理
  if (typeof input === 'string') {
    const params = new URLSearchParams(input);
    urlObj = Object.fromEntries(params);
  } else if (typeof input === 'object' && input !== null) {
    urlObj = input;
  } else {
    throw new Error('输入必须是URL查询字符串或解析后的参数对象');
  }

  const filteredItems = [];
  for (const [queryKey, valueStr] of Object.entries(urlObj)) {
    valueStr.split(',').forEach(value => {
      filteredItems.push({ value, queryKey });
    });
  }
  return filteredItems;
}

// 调用示例
const queryStr = "cat_id=18%2C20%2C24&color_id=4";
const paramObj = { cat_id: "18,20,24", color_id: "4" };

console.log(convertQueryToFilteredItems(queryStr));
console.log(convertQueryToFilteredItems(paramObj));

内容的提问来源于stack exchange,提问作者Zubair Khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 08:55:23