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

如何将多组键值对格式的JavaScript字符串转换为对象数组?

解决方案

我来帮你修正这个问题~你的思路方向是对的,但问题出在没有为每个商品构建单独的对象,而是直接把值push到数组里了。这里给你一个纯JavaScript的解决方案:

首先,我们先明确需求:将用?分隔的商品字符串,转换成包含每个商品信息的对象数组,并且Qty和Price需要是数字类型。

完整代码实现

// 你的输入字符串
const inputStr = 'Package=sdvasd&Qty=1&Price=34?Package=sdabhjds&Qty=1&Price=234?';

// 第一步:按?分割商品片段,过滤掉空字符串(处理末尾的?)
const packageSegments = inputStr.split('?').filter(segment => segment.trim() !== '');

// 第二步:将每个商品片段转换成对象
const packageArr = packageSegments.map(segment => {
  const item = {};
  // 按&分割键值对
  const keyValuePairs = segment.split('&');
  
  keyValuePairs.forEach(pair => {
    // 拆分键和值
    const [key, value] = pair.split('=');
    // 对Qty和Price做类型转换
    if (key === 'Qty' || key === 'Price') {
      item[key] = Number(value);
    } else {
      item[key] = value;
    }
  });
  
  return item;
});

console.log(packageArr);

代码解释

  1. 分割并过滤无效片段:用split('?')分割后,原字符串末尾的?会产生一个空字符串,通过filter过滤掉这个空项,避免处理无效数据。
  2. 构建商品对象:用map遍历每个商品片段,为每个片段创建一个空对象,然后遍历该片段的键值对,将键值对赋值到对象中。
  3. 类型转换:针对Qty和Price字段,将字符串类型的值转换成数字类型,符合你预期的输出结构。

输出结果

运行代码后,你会得到预期的对象数组:

[
  { Package: 'sdvasd', Qty: 1, Price: 34 },
  { Package: 'sdabhjds', Qty: 1, Price: 234 }
]

你的原有代码问题分析

你的代码中,每次循环都直接把keys[1](也就是单个值)push到packageArr里,最终得到的是所有值的一维数组,而不是每个商品对应一个对象的数组。我们需要为每个商品单独创建对象,再把对象加入数组,才能得到预期的结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:15:08