Google Apps Script中for (var key in object)返回undefined问题求助
别着急,这种看似低级的小问题有时候真的会绕得人晕头转向,我帮你一步步拆解可能的原因:
1. 先确认你遍历的是正确的对象层级
从你给出的结构来看,advertiserVariables是嵌套在顶层对象里的子对象。如果你不小心直接遍历了整个顶层对象,然后试图访问object[key].reportName,那当key是advertiserId或advertiserName时,必然会返回undefined——因为这俩属性是字符串,根本没有reportName这个子属性。
举个错误示范:
const targetObj = { /* 你的完整对象结构 */ }; // 错误:遍历了顶层对象 for (var key in targetObj) { console.log(targetObj[key].reportName); // 遇到advertiserId时直接返回undefined }
正确的做法是精准遍历嵌套的advertiserVariables:
const targetObj = { /* 你的完整对象结构 */ }; // 正确:遍历子对象advertiserVariables for (var key in targetObj.advertiserVariables) { console.log(targetObj.advertiserVariables[key].reportName); // 这里就能正常拿到transaction_date、Page_URL等值了 }
2. 检查你的“对象”是不是JSON字符串
如果这个结构是你从API响应、PropertiesService存储或者其他地方拿到的JSON字符串,而没有先解析成JavaScript对象,那for in遍历的其实是字符串的索引(数字),object[key]会是单个字符,自然也会出现undefined的情况。
解决方法是先把字符串解析为对象:
// 假设你拿到的是JSON格式的字符串 const jsonString = '{"advertiserId":"123456", "advertiserName":"Name", ...}'; const targetObj = JSON.parse(jsonString); // 再去遍历targetObj.advertiserVariables
3. 排查低级拼写错误
别笑,这种情况真的很常见:比如把advertiserVariables写成了advertiserVariable(少了个s),或者定义对象时用的变量名是myObject,遍历的时候却写成了object。建议你对着代码逐字检查一遍变量名的大小写和拼写。
4. 注意Google Apps Script的特殊对象包装
如果你是通过UrlFetchApp这类服务拿到的对象,比如API响应,它可能是HTTPResponse包装对象,不是直接的JSON。这时候你需要先调用getContentText()把响应转成文本,再解析成对象:
const apiResponse = UrlFetchApp.fetch('你的接口地址'); const targetObj = JSON.parse(apiResponse.getContentText());
最后给你个快速排查技巧:在遍历前加一句console.log(targetObj.advertiserVariables),看看控制台输出的是不是你预期的嵌套对象——如果输出是undefined,那问题肯定出在对象的定义或获取环节;如果输出正确,再去检查遍历逻辑。
内容的提问来源于stack exchange,提问作者ajor

