Math.eval Help: Иногда функция работает, иногда нет - PullRequest
0 голосов
/ 28 января 2019

Я новичок в программировании и в настоящее время разрабатываю приложение wep рядом с приборной панелью.Я использую узел JS, экспресс и мангуст.

Я определил свои схемы и собранные данные от пользователей.Есть некоторые данные, которые я хотел бы работать с расчетами.

Это моя модель

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>

Кроме того, как мне обрабатывать подразделения?потому что добавление "" или () аннулирует значения и ничего не происходит.(также, если я делю на число, номер красный)

1 Ответ

0 голосов
/ 28 января 2019

Поскольку типы m_mgr, f_mgr, m_mru, f_mru явно определены как числа, вам не нужно выполнять 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() в этом сценарии, если я не смог понять проблему здесь.В этом случае, пожалуйста, поправьте меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...