Google Apps Script多数组遍历:识别无Tier的账户
问题说明
有三个数组:
const arr1 = ['Acc2','Acc2', 'Acc3', 'Acc3', 'Acc3', 'Acc4', 'Acc6', 'Acc6', 'Acc6']; const arr2 = ['5','', '', '', '', '', '10', '', '']; const arr3 = ['23','24', '25', '26', '27', '28', '30', '31', '32'];
arr1存储账户名称,arr2存储对应账户的层级(仅在账户首次出现的位置填写,其余对应位置为空),arr3存储对应账户的行号,三个数组元素一一对应。- 当前
Acc3和Acc4在arr2中无对应层级值,需要在Google Apps Script中遍历数组,生成以arr3元素为键、值为"No error"或"Error"的字典,示例输出:
const output_dict = { '23' : 'No error', '24' : 'No error', '25' : 'Error', '26' : 'Error', '27' : 'Error', '28' : 'Error', '30' : 'No error', '31' : 'No error', '32' : 'No error' };
实现方案
核心逻辑
- 先遍历数组,标记每个账户是否拥有有效层级值(即首次出现时
arr2对应位置非空)。 - 再次遍历数组,根据账户的层级有效性,为每个行号映射对应的状态值。
Google Apps Script 代码
function generateErrorDict() { // 输入数组 const arr1 = ['Acc2','Acc2', 'Acc3', 'Acc3', 'Acc3', 'Acc4', 'Acc6', 'Acc6', 'Acc6']; const arr2 = ['5','', '', '', '', '', '10', '', '']; const arr3 = ['23','24', '25', '26', '27', '28', '30', '31', '32']; // 记录每个账户是否有有效层级 const accountValidity = {}; const processedAccounts = new Set(); for (let i = 0; i < arr1.length; i++) { const account = arr1[i]; if (!processedAccounts.has(account)) { processedAccounts.add(account); // 去除首尾空格后判断是否为空 accountValidity[account] = arr2[i].trim() !== ''; } } // 生成结果字典 const outputDict = {}; for (let i = 0; i < arr1.length; i++) { outputDict[arr3[i]] = accountValidity[arr1[i]] ? 'No error' : 'Error'; } // 输出结果 console.log(outputDict); return outputDict; }
代码说明
- 第一遍遍历中,使用
Set避免重复处理同一账户,仅检查每个账户首次出现的arr2值,将账户的有效性存入accountValidity对象。 - 第二遍遍历直接根据行号对应的账户有效性,填充结果字典。
- 运行函数后,可通过Google Apps Script的日志查看生成的字典,也可直接返回该对象用于后续业务逻辑。
内容的提问来源于stack exchange,提问作者Shaik Naveed
相关产品推荐
相关产品推荐

