使用javascript计算循环内部条件的真实次数

时间:2015-12-30 08:30:24

标签: javascript if-statement for-loop

我在这里度过了一段艰难的时光,我知道这不会那么困难。我有一个for循环,它在我正在尝试编写的Google Apps脚本中运行一系列单元格值,并且每次循环时,它都会检查某个条件是否为真。如果这是真的,那么暂时将结果记录到Logger.log()。

我需要在Logger.log()中显示的结果总数(在这种情况下,它将是10)并且我能够想到这样做的最佳方式是每次计数1在for循环中,条件为真。获得有多少结果的数值应该非常简单,但我没经验,并且一直在寻找能够帮助我的任何事情的时间,而我却无法弄明白。这是我正在使用的代码。

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];

 }
}

如果有人可以填写我所缺少的内容,我会非常感激!

5 个答案:

答案 0 :(得分:3)

您可以使用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
});

它现在遍历你的数组两次,这会影响性能,但它肯定会提高可读性。如果性能不重要,请使用此选项。

答案 1 :(得分:2)

获取一个全局变量计数器并将其初始化为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++;
    }
}

答案 2 :(得分:2)

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

&#13;
&#13;
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);
}
&#13;
&#13;
&#13;

答案 3 :(得分:1)

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);

所以你可以在循环中的条件为真后得到总值

答案 4 :(得分:1)

这是Javascript For Loop

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

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