javascript - 谷歌脚本中带有字符串的动态变量名称

标签 javascript arrays for-loop google-apps-script foreach

目前,我有两个执行相同操作的函数,一次为我(假设为 H),一次为我的妻子(W)。

该函数的作用如下:选择正确的电子表格,然后获取电子表格中的一些值来定义 1/一个问题; 2/消息和 3/主题。稍后我会用这些内容制作一封电子邮件。

这里是 H 的代码(变量 row 和 Loopsize 之前已定义):

  ss.setActiveSheet(ss.getSheetByName("question_H"));
  var sheet_H = SpreadsheetApp.getActiveSheet();

  var question_H = sheet_H.getRange(row,6).getDisplayValue();

  var message_H = "";


  for (var i=1; i<=loopsize; i++) {
     var year = Number(startyear)+i;
     var answer = sheet_H.getRange(row,7+i).getDisplayValue();
    message_H=message_H 
    + year + ':' + '\n'
    + answer + '\n\n';
  }

  var subject_H = question_H;

我想知道是否可以创建一个循环,这样我就不必使用 H 和 W 编写两次相同的代码。经过一些研究,我想出了以下内容(这不是相同的代码,但只是说明了我找到的解决方案):

 var names = ["H","S"];

  var message_H = "";
  var subject_H = ""; 

  var message_W = "";
  var subject_W = ""; 

  for each (var name in names){

  eval("message_"+[name] + " = "  + "'"+ name + "'")  ; 
  eval("subject_"+[name] + " = "  + "'"+ name + "'")  ;   


   }

但是我发现eval的使用非常麻烦。有没有更简单的方法来做到这一点?

感谢您的帮助。

==================================编辑=============== =======================

这是我根据库珀的建议想到的。现在它可以工作了,尽管我必须使用一次 eval,这有点令人失望。

另外,谁能解释为什么变量 row、startyear 和 Loopsize 必须在函数 getQA 中定义,而不是在 mainQA 中定义?我本以为如果它们在 mainQA 中定义,那么它们就可以在 getQA 中使用,因为 getQA 是从 mainQA 调用的。是不是错了?

function mainQA() {


  getQA("h");
  getQA("w");

}


function getQA(type){
  var p=type;

  var ss=SpreadsheetApp.getActive();
  var help_sheet=ss.getSheetByName("help");

  var row = help_sheet.getRange(3,2).getDisplayValue(); 
  var startyear = help_sheet.getRange(4,2).getDisplayValue();
  var loopsize = help_sheet.getRange(5,2).getDisplayValue();

  var email_w = 'wife@gmail.com';
  var email_h = 'husband@gmail.com';

  var email = eval("email_"+p);


  var sh=ss.getSheetByName('question_' + p);

  var question = sh.getRange(row,6).getDisplayValue();

  var message = "";

  for (var i=1; i<=loopsize; i++) {
     var year = Number(startyear)+i;
     var answer = sh.getRange(row,7+i).getDisplayValue();
    message=message 
    + year + ':' + '\n'
    + answer + '\n\n';
  }

  var subject = 'Q&A: ' + question;
  message = message 
  +  'What is your answer for today? \n'
  +'link to a google form';


  MailApp.sendEmail(email,subject, message);

}

最佳答案

//可以创建带参数的函数。如果您不提供“W”,则默认为“H”;

function getQMS(type){
  var p=type||'H';
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('sheet_' + p);
  var row={'H':1,'W':2}; //whatever you want
  var col={'H':1,'W':2}; //again whatever you want
  var q=sh.getRange(row[p],col[p]).getValue();
  var m='';//not defined
  var s='';//not defined
  var QMS={Question:q,Message:m,Subject:s};
  return QMS;
}

关于javascript - 谷歌脚本中带有字符串的动态变量名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48292610/

相关文章:

javascript - 将矩形对齐到圆内

javascript - 解释 javascript 中的 +var 和 -var 一元运算符

c - 从数组中输入几个数字,每个数字检查是否为整数

PHP 获取数据库一个月中的几天

r - 将 for 循环的结果保存为 r 中的向量

javascript - 使用 SVG Logo 中的动画半圆

javascript - 根据图像在 WordPress 中的方向向图像添加类

java - 返回数组中整数的第一个数字

c - 删除数组中的重复项并用未使用的值替换它们

c - Do 和 While 循环