Node.js中如何用split()和reduce()转换JSON带分数输入为数字?
基于split()和reduce()实现带分数转数字
你可以通过先按空格拆分带分数结构,再分别处理整数和分数部分的方式,用split()和reduce()实现需求,完全兼容纯整数、纯分数、带分数三种输入格式。
核心实现代码
替换原来分开处理整数和分数的代码,改用一个通用转换函数:
// 通用带分数转换函数 const parseFraction = (str) => { // 按空格拆分带分数结构(如"16 1/2"拆成["16", "1/2"]) const parts = str.trim().split(' '); // 累加所有部分的数值 return parts.reduce((total, part) => { // 对每个部分按"/"拆分,处理分数或整数 const fraction = part.split('/').map(Number); // 分数计算分子/分母,整数直接取数值 return total + (fraction.length === 2 ? fraction[0] / fraction[1] : fraction[0]); }, 0); }; // 处理请求中的各个字段 const FrameWidth = parseFraction(req.body.FrameWidth); const FrameHeight = parseFraction(req.body.FrameHeight); const PictureWidth = parseFraction(req.body.PictureWidth); const PictureHeight = parseFraction(req.body.PictureHeight); const MatOverlap = parseFraction(req.body.MatOverlap);
兼容的输入场景
这个函数能自动适配三种输入格式:
- 纯整数:
"16"→ 转换为16 - 纯分数:
"1/2"→ 转换为0.5 - 带分数:
"16 1/2"→ 转换为16.5
请求结构简化对比
原请求结构(拆分整数和分数字段):
{ "FrameWidth": "16", "FrameWidthFraction": "1/2", "FrameHeight": "20", "FrameHeightFraction": "0", "PictureWidth": "11", "PictureWidthFraction": "0", "PictureHeight": "17", "PictureHeightFraction": "0", "MatOverlap": "0", "MatOverlapFraction": "1/2" }
简化后的请求结构(单一字段支持带分数):
{ "FrameWidth": "16 1/2", "FrameHeight": "20", "PictureWidth": "11", "PictureHeight": "17", "MatOverlap": "1/2" }
内容的提问来源于stack exchange,提问作者Pyli
相关产品推荐
相关产品推荐

