首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >数组项上的ReferenceError

数组项上的ReferenceError
EN

Stack Overflow用户
提问于 2018-05-28 14:47:00
回答 1查看 119关注 0票数 0

这应该是一个真正简单的脚本,在3列之间改变一列的标题。我让它工作过一次,但现在它出现了一个我不理解的错误:

ReferenceError:未定义“今日”。(第10行,文件"Code")

代码如下:

代码语言:javascript
复制
function Progressions() {
  var workoutSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Workouts");

  var Increment = workoutSheet.getRange(2, 1, 1, 3).getValues();
  var newRoutine =[[]]

  if (Increment == [[Today,,]]){ 
    var newRoutine = [[ ,Today, ]]
    Increment.setValues(newRoutine);
  } else {
    if (Increment == [[,Today,]]){ 
      var newToday = [[,,Today]]
      Increment.setValues(newRoutine);
    } else {
      if (Increment == [[,,Today]]){ 
        var newToday = [[Today,,]]
        Increment.setValues(newRoutine);
      }
    }
  }

显然,没有定义Today,因为这只是数组的内容。我认为这个脚本应该只更改newToday数组的内容,然后将其输入到todayIncrement范围中。

你知道我如何才能消除这个错误并实现我的目标吗?

EN

回答 1

Stack Overflow用户

发布于 2018-05-28 18:35:34

有几个原因导致你的代码不能工作,比如“今天”,但是在你调用.getValues();的数组中,返回的数组将类似于[["","Today",""]]

你不能使用Increment.setValues(------);,因为increment是一个数组而不是一个range对象。

应构造if语句

代码语言:javascript
复制
if(-----){

} else if (-----) {

} else {

}

此代码按照您的要求执行以下操作:

代码语言:javascript
复制
function Progressions() {
    var workoutSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Workouts");
    var range = workoutSheet.getRange(2, 1, 1, 3);
    var increment = range.getValues();

    var newRoutine;
    var testValue = "Today";

    if (increment[0][0] == testValue) {
        newRoutine = [["", "Today", ""]];
    } else if (increment[0][1] == testValue) {
        newRoutine = [["", "", "Today"]];
    } else if (increment[0][2] == testValue) {
        newRoutine = [["Today", "", ""]];
    }
    range.setValues(newRoutine);
}

if-else链的一个更容易扩展的替代实现(例如,如果你有365个不同的训练作为列,上面的方法需要365个if-else检查),代价是需要更多的JavaScript知识来理解它是如何工作的:

代码语言:javascript
复制
function Progressions() {
  const workoutSheet = SpreadsheetApp.getActive().getSheetByName("Workouts"),
      // 1 column per workout (here we have 3).
      headerRange = workoutSheet.getRange(2, 1, 1, 3),
      // Assume headers are in the range's first row.
      headers = headerRange.getValues()[0],
      newRoutine = [];

  // Use Array#indexOf to do all the nasty "if-else if" checking.
  const searchValue = "Today";
  const columnIndex = headers.indexOf(searchValue);
  if (columnIndex === -1)
    throw new Error("'" + searchValue + "' not found in headers ('" + headerRange.getA1Notation() + "').");

  // Set default header values (no Array#fill in Apps Script yet).
  headers.forEach(function (s) { newRoutine.push(""); });

  // Use addition and the modulus operator to increment and wrap.
  const newIndex = (columnIndex + 1) % newRoutine.length;
  newRoutine[newIndex] = searchValue;

  // Write the new header values.
  headerRange.setValues( [newRoutine] );
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50560569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档