使用javascript计算for循环中条件为真的次数

使用javascript计算for循环中条件为真的次数,javascript,if-statement,for-loop,Javascript,If Statement,For Loop,我在这里过得很艰难,我知道不会那么困难。我有一个for循环,它运行在我试图编写的googleapps脚本中的一系列单元格值上,每次循环时,它都会检查某个条件是否为真。如果这是真的,那么暂时将结果记录到Logger.log 我需要Logger.log中显示的结果总数。在本例中,结果总数为10,我所能想到的最好方法是,在for循环中,每次条件为真时,将结果总数加1。得到多少个结果的数值应该很简单,但我缺乏经验,花了几个小时寻找任何我认为可能对我有帮助的东西,我就是想不出来。这是我正在使用的代码 va

我在这里过得很艰难,我知道不会那么困难。我有一个for循环,它运行在我试图编写的googleapps脚本中的一系列单元格值上,每次循环时,它都会检查某个条件是否为真。如果这是真的,那么暂时将结果记录到Logger.log

我需要Logger.log中显示的结果总数。在本例中,结果总数为10,我所能想到的最好方法是,在for循环中,每次条件为真时,将结果总数加1。得到多少个结果的数值应该很简单,但我缺乏经验,花了几个小时寻找任何我认为可能对我有帮助的东西,我就是想不出来。这是我正在使用的代码

var currentsheet = SpreadsheetApp.getActiveSheet();
var values = currentsheet.getRange("A28:E").getValues();

for (i=0; i<values.length; i++) {
if (values[i][3] === "Section 179 Depreciation") {
  var date = values[i][0];
  var amount = values[i][1];
  var desc = values[i][2];
  var expType = values[i][3];
  var notes = values[i][4];

 }
}
如果有人能告诉我我错过了什么,我将非常感激

var currentsheet = SpreadsheetApp.getActiveSheet();
var values = currentsheet.getRange("A28:E").getValues();
var j=0;
for (i=0; i<values.length; i++) {
if (values[i][3] === "Section 179 Depreciation") {
  var date = values[i][0];
  var amount = values[i][1];
  var desc = values[i][2];
  var expType = values[i][3];
  var notes = values[i][4];
   j++;
 }
}
alert(j);
因此,在循环中的条件为真后,您可以得到总值。取一个全局变量计数器,用0初始化它,并在进入if条件时增加计数器的值。它会给你多少倍的条件是真实的。无论何时开始计数,只要将计数器初始化为0即可

您可以使用Array.prototype.filter筛选值并获取其长度:

var filtered = values.filter(function(x) { 
    return x[3] === "Section 179 Depreciation"; 
});
var count = filtered.length;
或使用ES6箭头功能:

var filtered = values.filter(x => x[3] === "Section 179 Depreciation");
var count = filtered.length;
重新使用这些过滤值会更方便,例如记录它们:

filtered.forEach(function(x) { 
    var date = x[0];
    var amount = x[1];
    var desc = x[2];
    var expType = x[3];
    var notes = x[4];
    // log
});

它现在在数组中迭代两次,这可能会影响性能,但它确实提高了可读性。如果性能不重要,请使用此选项。

如果需要使用数据,我会将其保存到数组中,以便获得要使用的数组方法

var currentsheet=电子表格app.getActiveSheet; var values=currentsheet.getRangeA28:E.getValues; var第179节=[]; 对于i=0;我这是

在这种情况下,我将按以下方式使用计数器:

var currentsheet = SpreadsheetApp.getActiveSheet();
var values = currentsheet.getRange("A28:E").getValues();

var counter = 0; // counter
for (i=0; i<values.length; i++) {
if (values[i][3] === "Section 179 Depreciation") {
  var date    = values[i][0];
  var amount  = values[i][1];
  var desc    = values[i][2];
  var expType = values[i][3];
  var notes   = values[i][4];
  counter++; //we encrease counter every time condition is true 
 }
}

获取一个计数器,在for之前将其设置为零,如果递增1,则在for内部将其设置为零。在for之后,如果闭包对您不起作用,您会得到您想要的东西在里面输入一个计数器吗?或者你还面临着另一个问题?这应该是非常简单的。我想指出,我提到我没有经验,但有人决定编辑出来,所以你没有办法知道。但我还是后退了。但是,是的,我相当缺乏经验,我已经有一段时间没有用javascript做过任何事情了。@Tushar谢谢,这真的很简单和直接。“我一定比我意识到的更累了。”我向你道歉!我用柜台,我有点不好意思。我知道我没有经验,但我觉得即使是我也应该意识到这一点。我知道这必须很简单。非常感谢你。
var currentsheet = SpreadsheetApp.getActiveSheet();
var values = currentsheet.getRange("A28:E").getValues();

var counter = 0; // counter
for (i=0; i<values.length; i++) {
if (values[i][3] === "Section 179 Depreciation") {
  var date    = values[i][0];
  var amount  = values[i][1];
  var desc    = values[i][2];
  var expType = values[i][3];
  var notes   = values[i][4];
  counter++; //we encrease counter every time condition is true 
 }
}