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

如何将含重复键的键值对字符串解析为数组值对象

实现方案

针对你给出的固定格式字符串转同键值聚合对象的需求,用原生JavaScript即可高效实现,时间复杂度O(n),无额外依赖。

核心思路

  • 先按逗号拆分字符串,拿到每一组独立的键: 值片段
  • 对每个片段按冒号拆分,分别取出键和值,去除前后多余空格
  • 遍历过程中给结果对象中不存在的键初始化空数组,将对应值追加到数组中即可

完整代码

const inputStr = "foo: bar, foo: baz, some: thing, some: other, third: other";
const result = {};

inputStr.split(',').forEach(segment => {
  const [key, value] = segment.split(':').map(str => str.trim());
  if (!result[key]) result[key] = [];
  result[key].push(value);
});

console.log(result);
// 输出:{ foo: ['bar', 'baz'], some: ['thing', 'other'], third: ['other'] }

注:你给出的期望输出中some字段值顺序为[other, thing],和原字符串中值的出现顺序相反,而foo字段顺序和出现顺序一致,推测为手误。如果确实需要倒序存储值,遍历每个键调用reverse()方法即可,注意该操作会把所有键的值顺序反转。

更精简的reduce写法

const result = inputStr.split(',').reduce((res, segment) => {
  const [key, val] = segment.split(':').map(s => s.trim());
  // 兼容旧环境可替换为 res[key] = res[key] || []
  res[key] ??= [];
  res[key].push(val);
  return res;
}, {});

适配说明

  • 代码中所有拆分步骤都做了空格去除处理,可以兼容冒号、逗号前后带任意数量空格的格式
  • 当前实现针对你给出的无特殊字符的简单格式,如果值本身包含逗号、冒号,需要根据实际的格式规则调整解析逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:18:14