当两个数组数据点匹配时执行函数

时间:2018-07-18 09:21:42

标签: javascript arrays date google-apps-script

我是JavaScript新手,请原谅任何错误/明显的疏忽。

我试图找到一种方法来运行仅在"Run months"之一与当前月份匹配时才执行的函数。下面的代码对我来说似乎很有意义,但是无法执行?

在某种程度上,我试图运行一个基于时间的宏,即Google表格,它每季度只执行一次(Runmonths)。

function createTimeDrivenTriggers() {

var months = ['January','February','March','April','May','June','July','August','September','October','November','December'];
var RunMonths = ["January", "April", "July", "October"];
var now = new Date();
var thisMonth = months[now.getMonth()];
var getMonth = Runmonths[now.getMonth()];


  if(thisMonth === getMonth){
    var spreadsheet = SpreadsheetApp.getActive();
    spreadsheet.getRange('AE:AE').activate();
    spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
    spreadsheet.getRange('AE1').activate();
    spreadsheet.getCurrentCell().setValue('OUTCOME');

  }
}

2 个答案:

答案 0 :(得分:1)

Runmonths仅包含4个元素,但是now.getMonth()返回的值6,超出范围。而是检查thisMonth是否在Runmonths数组中。您可以使用indexOf()方法在Google Apps脚本中执行此操作。

我已经从您的原始代码中删除了一些逻辑,以解决您的特定问题。您可以使用now中的日期来查看,它将执行您想要的月份。

function test() {
  var months = ["January","February","March","April","May","June","July","August","September","October","November","December"];
  var RunMonths = ["January", "April", "July", "October"];
  var now = new Date("February 1, 2018");
  var thisMonth = months[now.getMonth()];
  Logger.log("This month: " + thisMonth); 
  if (RunMonths.indexOf(thisMonth) != -1) {
    Logger.log("Run this month");
  } else {
    Logger.log("Don't run this month");
  }
}

答案 1 :(得分:0)

我假设getMonth()返回一个整数。您正在使用此返回的整数作为索引。

您使用的两个数组在某个索引处的值不同。 months[1]'February',而RunMonths[1]"April"

由于"February"不等于"April",因此您无法使用其他功能。