我在这里度过了一段艰难的时光,我知道这不会那么困难。我有一个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];
}
}
如果有人可以填写我所缺少的内容,我会非常感激!
答案 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)
如果您需要使用数据,我会将其保存到数组中,以便您使用数组方法。
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;
答案 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)
在这种情况下,我会使用计数器跟随方式:
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
}
}