node.js - Math.eval 帮助:有时函数有效,有时无效
问题描述
我是编码新手,目前正在开发靠近仪表板的 wep 应用程序。我正在使用节点 js、express 和 mongoose。
我已经定义了我的模式并从用户那里收集数据。我希望使用一些数据进行计算。
这是我的模型
var mongoose = require("mongoose"),
math = require('mathjs');
//*****DATABASE CONFIG*******
// Demog Database
var headcountSchema = new mongoose.Schema({
headct_start: Number,
headct_end: Number,
m_mgr: Number,
f_mgr: Number,
m_stf: Number,
f_stf: Number,
m_ops: Number,
f_ops: Number,
m_mru: Number,
f_mru: Number,
m_intl: Number,
etc....
created: {type: Date, default: Date.now},
user: {
id: {
type: mongoose.Schema.Types.ObjectId,
ref: "User"
},
username: String
}
});
module.exports = mongoose.model("Headcount", headcountSchema);
我使用以下格式进行所有计算:
headcountSchema.virtual('totalmanager').get(function() {
return math.eval(this.m_mgr + this.f_mgr);
});
我不明白为什么上面的代码适用于某些代码而不适用于其他代码,而它的格式完全相同。
例如,它适用于总管理器,但不适用于这个:
headcountSchema.virtual('totalintl').get(function() {
return math.eval(this.m_intl + this.f_intl);
});
headcountSchema.virtual('totalmru').get(function() {
return math.eval(this.m_mru + this.f_mru);
});
因此,当我通过我的 ejs 文件传递它时,什么也没有出现:
<div class="four wide column grid ui statistic">
<div class="value">
<%=headcounts.totalmru%>
</div>
<div class="label">
Employees in Mru
</div>
此外,我如何处理部门?因为添加 "" 或 () 会使值无效并且没有任何反应。(另外,如果我除以一个数字,这个数字是红色的)
解决方案
由于 的 类型m_mgr, f_mgr, m_mru, f_mru
被显式定义为数字,因此您不需要 perform math.eval()
,您可以轻松地返回表达式。
headcountSchema.virtual('totalmanager').get(function() {
return this.m_mgr + this.f_mgr;
});
headcountSchema.virtual('totalintl').get(function() {
return this.m_intl + this.f_intl;
});
headcountSchema.virtual('totalmru').get(function() {
return this.m_mru + this.f_mru;
});
该math.eval()
函数评估表示为字符串的 JavaScript 代码。发送的参数可以是字符串形式。
如果你发送表达式
math.eval(2 + 2)
是一样的,math.eval(4)= 4
因为表达式将被执行然后被评估。所以你也可以2 + 2
直接不使用math.eval()
(除非你发送字符和字符串)。
小心发送的值的类型。
math.eval('2 + 2') = 4
math.eval('2' + '2') = 22
math.eval('2' + '+' + '2')= 4
math.eval('2' + 2))= 22
所以,我不建议math.eval()
在这种情况下使用,除非我没有理解这里的问题。在这种情况下,请随时纠正我。
推荐阅读
- javascript - 如何在 Jquery EasyUI 中自定义链接按钮大小,而不是使用内置的小尺寸或大尺寸?
- netlogo - 使用网络扩展,如何识别输出中的网络节点?
- java - 无法弄清楚为什么 Intent 没有被传递回以前的活动
- sql - 选择所有孩子都具有状态 x 的父母
- javascript - 如何将节点连接到组而不是子节点?
- c# - oledb excel 一些日期列返回 null
- javascript - 在 JavaScript 中从头开始创建空 URL 对象
- c# - 从单个控制器 Action ASP.NET MVC 调用多个控制器 Action
- javascript - 输入验证 JavaScript?
- python - 本地 GitLab 跑步者冻结,而 Shared GitLab.com 跑步者成功