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

JavaScript如何解析自然语言指令识别运算符并执行加法运算

问题描述

我正在尝试通过人类自然语言实现加法运算。我的代码接收输入后,将每个词汇拆分并推入名为dl的数组中,该功能运行无异常,执行console.log打印时输出如下:

[ 'add' ]
[ 'add', '6' ]
[ 'add', '6', 'and' ]
[ 'add', '6', 'and', '4' ]

目前我在代码中定义了一个用作“运算符”的数组,内容如下:

var operator = [
  "add",
  "sub",
  "mul",
  "div"
]

我希望遍历dl数组,检测其中是否包含运算符数组内的元素;若检测结果为真,则对6和4执行加法运算,使代码最终输出计算结果10。
当前完整代码如下:

function output(func) {
  console.log(func)
}

var operator = [
 "add",
 "sub",
 "mul",
 "div"
]

var dl = []

const read = string => {
   return string.split(' ').map(item => {
      dl.push(item.trim())
      console.log(dl)
   })
}


var main = read(
  `add 6 and 4`
)

output(main)
解决方案

原代码存在两个核心问题:

  • read方法中使用map做数组推入操作但没有返回有效值,最终main变量拿到的是全为undefined的数组
  • 词汇拆分完成后没有实现运算符识别、数字提取、运算执行的逻辑

修正后的可运行代码如下:

function output(res) {
  console.log(res)
}

const operator = [
  "add",
  "sub",
  "mul",
  "div"
]

// 运算符与计算逻辑映射
const calcMap = {
  add: (a, b) => a + b,
  sub: (a, b) => a - b,
  mul: (a, b) => a * b,
  div: (a, b) => a / b
}

const dl = []

const read = string => {
  // 拆分词汇存入dl数组
  string.split(' ').forEach(item => {
    dl.push(item.trim())
  })

  // 识别有效运算符
  const currentOp = dl.find(item => operator.includes(item))
  if (!currentOp) return new Error('未识别到有效运算符')

  // 提取所有有效数字
  const nums = dl.filter(item => !isNaN(Number(item))).map(Number)
  if (nums.length < 2) return new Error('未识别到足够的运算数值')

  // 执行对应运算返回结果
  return calcMap[currentOp](nums[0], nums[1])
}


const main = read(`add 6 and 4`)
output(main) // 最终输出10

代码逻辑说明:

  • 用forEach替代原有的map完成词汇推入操作,避免生成无意义的undefined数组
  • 新增运算映射表,将运算符字符串和实际计算逻辑绑定,后续扩展运算规则只需要修改对应配置即可
  • 词汇拆分完成后先匹配有效运算符,再过滤提取所有数字项并转为数值类型
  • 校验运算符和运算数有效性后执行计算,输入add 6 and 4时会正确输出结果10,替换为其他运算符(如sub 6 and 4)也能返回正确计算结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:36:15