【问题标题】:Use a "months" array to perform calculations for each month in a for loop使用“months”数组在 for 循环中执行每个月的计算
【发布时间】:2015-08-31 07:01:02
【问题描述】:

我有一个 mongo 集合来存储“项目”,每个文档存储一个项目,每年每个月都有不同的计算

a_jan : 10,
a_feb : 20,
a_mar : 25,
a_apr : 70
...

b_jan : 30,
b_feb : 10,
b_mar : 20,
b_apr : 70
...

c_jan : 80,
c_feb : 2,
c_mar : 20,
c_apr : 65
...

我创建了一个模板助手来执行一些数学计算,涉及每个月的字段(即:rtwc_jan = (a_jan + b_jan) / c_jan)。

有很多不同的计算,但每个月都会执行相同的计算。

如何使用for 循环来容纳来自“月”数组的数组key

这是我的代码(没有 for 循环...)

var months = ["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","des"];

var arrayLength = months.length;

for (var i = 0; i < arrayLength; i++) {
        alert(months[i]);       

        // Need to Calculate rtcw for each month        

        var scope = {
                a_jan : currentProject.a_jan,
                b_jan : currentProject.b_jan,
                c_jan : currentProject.c_jan,
        };      

        var calculation_a = math.eval('(a_jan - b_jan) * c_jan / 35', scope);

        scope.a = calculation_a;

        var rtcw_jan = math.eval('max(a,15)', scope);

        console.log(rtcw_jan);
}

【问题讨论】:

  • 你用 Mathjs 做什么?
  • 这些不是实际计算,为简单起见,我在这里复制了这段代码。我们使用一些工程计算并计划包括更复杂的计算

标签: javascript arrays meteor meteor-helper


【解决方案1】:

我认为您想通过使用月份作为键从 currentProject 对象中获取属性。像这样:

var months = ["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","des"];
var arrayLength = months.length;
var rtcw = {};

for (var i = 0; i < arrayLength; i++) {
        alert(months[i]);

        // Need to Calculate rtcw for each month
        var scope = {
                a : currentProject["a_" + months[i]],
                b : currentProject["b_" + months[i]],
                c : currentProject["c_" + months[i]],
        };

        var calculation_a = math.eval('(a - b) * c / 35', scope);

        scope.a = calculation_a;

        rtcw[months[i]] = math.eval('max(a,15)', scope);
        console.log(rtcw[months[i]]);
}

简化:

var months = ["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","des"];
var rtcw = {};

for (var i = 0; i < months.length; i++) 
{
    var a = currentProject["a_" + months[i]];
    var b = currentProject["b_" + months[i]];
    var c = currentProject["c_" + months[i]];

    rtcw[months[i]] = max((a - b) * c / 35, 15);

    console.log(rtcw[months[i]]);
}

【讨论】:

  • 正确的@PhillTreddenick!,以及如何使用months[i] 作为var 名称的一部分? var rtcw_jan 也应该迭代数月。 (我正在学习 javascript,如果这是琐碎的,对不起......)
  • 可能你想要这样的东西:var rtcw = {}; rtcw[months[i]] = math.eval('max(a,15)', scope); console.log(rtcw[months[i]]);
  • 正是如此,标记为正确答案。谢谢菲尔!
猜你喜欢
  • 1970-01-01
  • 2021-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 2013-03-03
  • 2011-10-24
  • 2014-04-10
相关资源
最近更新 更多