如何将字符串转换为对象数组?
字符串转指定对象数组的实现方案
这问题我之前处理类似格式的字符串时也碰到过,其实把需求拆解成几个小步骤就很容易实现了,直接上代码和详细解释:
实现代码
let str = "{SPOT:0,0:10,1:0},{SPOT:1,0:5,1:5}"; // 1. 拆分出单个对象的字符串片段 const objStringSegments = str.slice(1, -1).split('},{'); // 2. 将每个片段转换为目标对象并组装成数组 const result = objStringSegments.map(segment => { // 拆分键值对 const keyValuePairs = segment.split(','); const targetObj = {}; keyValuePairs.forEach(pair => { // 拆分键和值 const [key, value] = pair.split(':'); // 值转为数字类型,键直接保留原格式(对应目标里的"0"、"1"字符串键) targetObj[key] = Number(value); }); return targetObj; }); console.log(result); // 输出结果:[{"SPOT":0,"0":10,"1":0},{"SPOT":1,"0":5,"1":5}]
步骤拆解
- 第一步:拆分片段:用
slice(1, -1)去掉字符串首尾的大括号,再用split('},{')把整个字符串分割成两个独立的对象字符串片段,得到["SPOT:0,0:10,1:0", "SPOT:1,0:5,1:5"]。 - 第二步:转换为对象:遍历每个片段,先用
split(',')拆成单个键值对,再对每个键值对用split(':')分离键和值,最后把值转为数字类型,赋值给对象对应的键,最终把所有对象收集到数组里。
更简洁的写法(用reduce)
如果喜欢更紧凑的代码,可以用reduce替代forEach来构建对象:
let str = "{SPOT:0,0:10,1:0},{SPOT:1,0:5,1:5}"; const result = str.slice(1, -1).split('},{').map(segment => segment.split(',').reduce((obj, pair) => { const [key, val] = pair.split(':'); obj[key] = Number(val); return obj; }, {}) );
内容的提问来源于stack exchange,提问作者Manikandan
相关产品推荐
相关产品推荐

