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

Count how many times a conditional is true inside for loop with javascript

本文关键字:true 条件 javascript 计算 for 循环      更新时间:2023-09-26

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

我需要Logger.log()中显示的结果总数(在这种情况下,应该是10),我能想到的最好的方法是在for循环中,每次条件为true时都加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];
 }
}

如果有人能告诉我我错过了什么,我将不胜感激!

您可以使用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值会更方便,例如记录它们:

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 = SpreadsheetApp.getActiveSheet();
var values = currentsheet.getRange("A28:E").getValues();
var section179 = [];
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];
    
  section179.push({
    date: date,
    amount: amount,
    desc: desc,
    expType: expType,
    notes: notes
  });
  
 }
}
console.log( section179.length );
console.log( total( section179, 'amount' ) );
// example total up all the results of a number property
function total( arr, prop ){
  return arr.reduce(function( ret, curr ){
    return ret + curr[ prop ];
  }, 0);
}

取一个全局变量计数器,用0初始化它,并在它进入if条件时增加计数器的值。它会告诉你这个条件成立的次数。每当您想开始计数时,只需将计数器初始化为0。

var currentsheet = SpreadsheetApp.getActiveSheet();
var values = currentsheet.getRange("A28:E").getValues();
var counter = 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];
        counter++;
    }
}
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);

因此您可以在循环

中的条件为true后获得总值

这是循环的Javascript

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

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 
 }
}