You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Apps Script中如何用单个变量统计Dell与HP设备数量?

问题

正在学习JavaScript和Google Apps Script,练习时遇到问题:想用同一个变量统计表格中Dell和HP设备的数量(表格内有100台Dell、400台HP),不想新增第二个计数器变量。当前代码用同一个counter变量导致两类设备数量输出均为500;之前尝试在if语句内打印会重复输出多次,求合适的实现方法。

原代码如下:

var ss= SpreadsheetApp.getActiveSpreadsheet();
var es = ss.getSheetByName("School1");
var ms = ss.getSheetByName("School2");
var hs = ss.getSheetByName("School3");
var esValues = es.getDataRange().getValues();
var counter = 0;
//var esValues = es.getRange('A:C').getValues();
Logger.log(esValues.length);
for(var i = 0; i < esValues.length; i++){
   var data= esValues[i];
   var first = data[1];
   var last = data[0];
   var middle = data[2];
   var studentid = data[3];
   var device = data[4];
   if(device.includes("Dell")){
     counter++;
     //Logger.log(`Dell count is ${counter}`); //When add here it prints same line 100+ times  
     } else if(device.includes("HP")){
     counter++;
            }
 
}
Logger.log(`Dell count is ${counter}`)//Printing same count 500
Logger.log(`Hp count is ${counter}`)//Printing same count 500

}
解决方案

单一数字变量无法同时存储两个独立的统计值,推荐用对象类型的变量实现“一个变量存两类统计”的需求——对象可以包含多个属性,分别对应Dell和HP的计数,既不用新增多个独立变量,又能清晰区分两类统计结果。

修改后的代码

var ss = SpreadsheetApp.getActiveSpreadsheet();
var es = ss.getSheetByName("School1");
var esValues = es.getDataRange().getValues();
// 用一个对象作为计数器,内置两个属性分别统计Dell和HP,初始值为0
var counter = { Dell: 0, HP: 0 };

Logger.log(esValues.length);
for(var i = 0; i < esValues.length; i++){
   var data = esValues[i];
   var device = data[4];
   // 仅保留需要的变量,删除未使用的冗余变量
   if(device.includes("Dell")){
     counter.Dell++;
   } else if(device.includes("HP")){
     counter.HP++;
   }
}
// 循环结束后统一打印最终统计结果,避免重复输出
Logger.log(`Dell count is ${counter.Dell}`);
Logger.log(`HP count is ${counter.HP}`);

关键说明

  1. 对象计数器的优势:用counter.Dell和counter.HP分别累加对应设备数量,既满足“一个变量”的要求,又保证统计逻辑清晰、可读性强。
  2. 精简冗余代码:删除原代码中未使用的ms、hs、first等变量,减少代码复杂度。
  3. 费凑第一种,快速定制–贯穿.out那 contributionsKeep attempt我太懂你这种憋屈感,不对,直接说避免重复输出:不在循环内打印,而是等统计完成后一次性输出结果,解决重复打印的问题。

极端方案(不推荐)

如果执意想用非对象的单一变量(可读性差、易出错),可以用数字编码的方式,比如让counter的高位存Dell数量,低位存HP数量:

var ss = SpreadsheetApp.getActiveSpreadsheet();
var es = ss.getSheetByName("School1");
var esValues = es.getDataRange().getValues();
var counter = 0;

Logger.log(esValues.length);
for(var i = 0; i < esValues.length; i++){
   var device = esValues[i][4];
   if(device.includes("Dell")){
     counter += 1000; // 用高位存储Dell数量(假设HP数量不超过999)
   } else if(device.includes("HP")){
     counter += 1;
   }
}
// 拆分数字得到两类设备数量
var dellCount = Math.floor(counter / 1000);
var hpCount = counter % 1000;
Logger.log(`Dell count is ${dellCount}`);
Logger.log(`HP count is ${hpCount}`);

这种方法仅适用于数量范围可预知的场景,远不如对象方式实用,不建议使用。


内容的提问来源于stack exchange,提问作者Mr. Anderson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 00:06:23