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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 16:27:24