如何将含重复键的键值对字符串解析为数组值对象
实现方案
针对你给出的固定格式字符串转同键值聚合对象的需求,用原生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
相关产品推荐
相关产品推荐

