Google Script中如何按条件使用map方法遍历二维数组执行计算
Google Apps Script 按布尔条件处理数组元素实现方案
你已经实现了两个数组的zip合并,后续直接对合并后的二维数组调用map做分支判断即可,全程使用map实现符合自定义函数的性能规范,无额外遍历开销。
核心逻辑
合并后的二维数组每一项结构为[Arr1对应位置数值, Arr2对应位置布尔标记],遍历时解构取值即可:布尔值为true时执行预设计算,为false时返回0。
基础实现代码
// 表格内调用方式:=CONDITIONAL_CALC(数值数组范围, 布尔数组范围) function CONDITIONAL_CALC(arr1, arr2) { // 原有zip合并方法 const zip = (a1, a2) => a1.map((val, idx) => [val, a2[idx]]); // 遍历做条件计算 return zip(arr1, arr2).map(item => { const [numVal, boolFlag] = item; // 替换此处为你需要的自定义计算逻辑,示例为数值乘2 return boolFlag ? numVal * 2 : 0; }) }
适配表格选区的优化版本
实际在Google Sheets中选中单元格范围传入公式时,单列/单行范围会被识别为二维数组(例如选中A1:A4实际传入结构为[[1000],[2000],[3000],[4000]]),增加一层拍平处理,同时返回二维单列结构,结果会自动在单列纵向填充,无需手动调整数组维度:
function CONDITIONAL_CALC(arr1, arr2) { // 拍平表格传入的二维范围为一维数组 const flatArr1 = arr1.flat(); const flatArr2 = arr2.flat(); const zip = (a1, a2) => a1.map((val, idx) => [val, a2[idx]]); // 计算后转为单列二维结构,适配表格自动填充规则 return zip(flatArr1, flatArr2).map(item => { const [numVal, boolFlag] = item; return boolFlag ? numVal * 2 : 0; }).map(resItem => [resItem]); }
测试效果
用你提供的示例数组运行:
- Arr1 =
[1000,2000,3000,4000] - Arr2 =
[True,False,False,True] - 返回结果为
[2000, 0, 0, 8000],符合需求。
内容的提问来源于stack exchange,提问作者Andrey Augusto
相关产品推荐
相关产品推荐

