Google Apps Script处理表格数据时变量作为对象键不生效问题
问题根因
- 你错误地使用了点语法
people.name访问对象属性,这里的name是固定字符串键,不是你之前声明的name变量的值,所以所有行都会被塞到同一个people.name属性下,和你预期的动态用姓名做键完全不符。 - 你声明的
var name变量没有被实际使用,所以编辑器抛出了Var not being used in object.var的提示。
修正后代码
function myFunction() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('data'); var data = sheet.getDataRange().getValues(); var range = sheet.getRange("A1:L" + data.length); range.sort(1); const people = {}; for(var i = 0; i < data.length; i++) { // 拼接姓名,建议中间加分隔符避免特殊情况重名 var name = data[i][0] + '_' + data[i][1]; console.log(i); // 用方括号语法动态使用name变量的值作为对象键 if (!people[name]) { people[name] = {rows: [i]}; } else { people[name].rows.push(i); } } Logger.log(people); }
改动说明
- 把
people.name替换为people[name]:方括号语法会把括号内变量的实际值作为对象的键,实现每个姓名对应独立对象的需求。 - 拼接姓名时增加下划线分隔符,避免极端情况下不同姓名拼接后完全相同的问题,比如A列是
李B列是明,和A列是李明B列为空的情况,拼接后会重复,加分隔符可以减少这类冲突。 - 修正后编辑器就不会再报变量未使用的错误,因为你声明的
name变量已经被用来作为对象的动态键了。
内容的提问来源于stack exchange,提问作者Muchie
相关产品推荐
相关产品推荐

