js (函数)表达式计算npm包 hot-formula-parser

博主使用React + Antd + hot-formula-parser 实现以下功能

hot-formula-parser插件可以帮我们实现表达式的计算,表达式的格式判断等,如下图:

https://www.npmjs.com/package/hot-formula-parser

图一

图二

图三

概览图

 

使用方式:

import React, { Component } from 'react';

const FormulaParser = require('hot-formula-parser').Parser;
const parser = new FormulaParser();
let tempObj = parser.parse(new_express);

 

具体处理代码:

// 检查表达式验证是否通过 表达式 和	投标利率(%) 二取其一
	checkoutExpression = (text, obj) => {
		try {
			if (text) {
				let new_express;
				let result;
				// 需要对x的值代入表达式 否则表达式无法解
				try {
					new_express = this.props.checkExpressType(text, obj);
					let tempObj = parser.parse(new_express);
					return result = tempObj.error + '';
				} catch (e) {
					result = false;
					console.log('e', e)
				}
			}
		}
		catch (e) {
			console.log('表达式格式错误:', e);
		}
	}
checkExpressType = (text, obj) => {
		let new_express;
		let arrStr;
		let result;
		if (text.indexOf('(') > -1) { // 区分是否是函数 如果是 不能直接替换x 因为max也有x
			arrStr = text.split('(');
			arrStr[1] = arrStr[1].replace('x', `*${obj.prdAmount}`);
			new_express = arrStr[0] + '(' + arrStr[1];
		} else { // 当不是函数时,判断x是否有系数 有则增加乘号
			const i = text.indexOf('x');
			arrStr = text.split('');
			let isOper = true;
			let flag = arrStr.length > 1 ? arrStr[i - 1] : false;
			if (!isNaN(+flag)) {
				isOper = false;
			}
			const x = isOper ? `${obj.prdAmount}` : `*${obj.prdAmount}`; // prdAmount是“发行规模x”

			new_express = text.replace('x', x)
		}
		return new_express;
	}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hzxOnlineOk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值