首页 > 解决方案 > 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>

此外,我如何处理部门?因为添加 "" 或 () 会使值无效并且没有任何反应。(另外,如果我除以一个数字,这个数字是红色的)

标签: node.jsexpressmathmongoose

解决方案


由于 的 类型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()在这种情况下使用,除非我没有理解这里的问题。在这种情况下,请随时纠正我。


推荐阅读