如何将多组键值对格式的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);
代码解释
- 分割并过滤无效片段:用
split('?')分割后,原字符串末尾的?会产生一个空字符串,通过filter过滤掉这个空项,避免处理无效数据。 - 构建商品对象:用
map遍历每个商品片段,为每个片段创建一个空对象,然后遍历该片段的键值对,将键值对赋值到对象中。 - 类型转换:针对
Qty和Price字段,将字符串类型的值转换成数字类型,符合你预期的输出结构。
输出结果
运行代码后,你会得到预期的对象数组:
[ { Package: 'sdvasd', Qty: 1, Price: 34 }, { Package: 'sdabhjds', Qty: 1, Price: 234 } ]
你的原有代码问题分析
你的代码中,每次循环都直接把keys[1](也就是单个值)push到packageArr里,最终得到的是所有值的一维数组,而不是每个商品对应一个对象的数组。我们需要为每个商品单独创建对象,再把对象加入数组,才能得到预期的结构。
内容的提问来源于stack exchange,提问作者NewUser
相关产品推荐
相关产品推荐

