Google App Script格式化日期在数组中匹配而不进行迭代

时间:2017-11-21 21:39:09

标签: date google-apps-script indexof

我试图通过使用findIndex方法在coloumn中找到第一次出现的日期,恰好是'MMM dd'格式。

以下代码无法实现

function copyInvoiceDetailsToDB() {

var sss = SpreadsheetApp.getActiveSpreadsheet();
var ss = sss.getSheetByName('Import MT Order Sheet'); //Source Sheet
var compareDate = ss.getRange(1,4).getValue();        // Search item
///var mmm = Utilities.formatDate(compareDate,"IST", 'MMM dd');


var reldata = ss.getRange('A3:AA'+ a).getValues();

var tss = SpreadsheetApp.openById("1xhPD6tlJiU33_tdnC82p-
e9rWA8mmMtI0g9jDLkk6s0");                              // sheet being searched
var ss = tss.getSheetByName('DB');     
var ssdata = ss.getRange('A:A').getValues(); // Range containing the values

var a = ssdata.indexOf(compareDate);

Logger.log(a);
Logger.log(compareDate);
Logger.log(ssdata);
return;

生成以下日志。

请帮助我理解我一定要出错的地方。

[17-11-22 02:40:11:568 IST] -1.0
[17-11-22 02:40:11:569 IST] Nov 22
[17-11-22 02:40:11:572 IST] [[],  [Sun Nov 19 00:00:00 GMT+05:30 2017], [Mon Nov 20 00:00:00 GMT+05:30 2017], [Mon Nov 20 00:00:00 GMT+05:30 2017], [Mon Nov 20 00:00:00 GMT+05:30 2017], [Tue Nov 21 00:00:00 GMT+05:30 2017], [Tue Nov 21 00:00:00 GMT+05:30 2017], [Wed Nov 22 00:00:00 GMT+05:30 2017], [Wed Nov 22 00:00:00 GMT+05:30 2017], [Wed Nov 22 00:00:00 GMT+05:30 2017], [Wed Nov 22 00:00:00 GMT+05:30 2017], [Wed Nov 22 00:00:00 GMT+05:30 2017], [Wed Nov 22 00:00:00 GMT+05:30 2017], [Wed Nov 22 00:00:00 GMT+05:30 2017], [Wed Nov 22 00:00:00 GMT+05:30 2017], [Wed Nov 22 00:00:00 

1 个答案:

答案 0 :(得分:0)

这个答案怎么样?从您的问题来看,我理解如下。

  • 您想使用字符串' MMM dd"来检索日期的第一个匹配项(行号?)。
  • 您希望了解使用indexOf()检索值。

关于使用indexOf()

从数组中检索值
  • 如果要使用indexOf()从数组中检索值,则数组必须是1维数组。 Sandy Good指出了这一点。
  • 当使用indexOf()从一维数组中检索值时,它不会检索每个元素中包含的值,它会为每个元素检索相同的值。
    • ["foo", "bar", "baz"].indexOf("ba")为-1。
      • 这意味着没有" ba"在数组中的每个元素中。
    • ["foo", "bar", "baz"].indexOf("bar")为1。
      • 这意味着有" bar"在数组的索引1处。
  • 当检索每个元素中包含的值时,每个元素都必须用作字符串。
    • ["foo", "bar", "baz"].indexOf("ba")为-1。
    • "bar".indexOf("ba")为0。
      • 这意味着" ba"在" bar"中找到第一个字符串。因此,在"bbbar".indexOf("ba")的情况下,结果是2。

反映它们的修改点如下。

修改点:

来自:

var a = ssdata.indexOf(compareDate);
Logger.log(a);

致:

var a;
for (var i in ssdata) {
  if (ssdata[i][0].indexOf(compareDate) > -1) {
    a = i;
    break;
  }
}
Logger.log(a);
  • a是包含值的索引" 11月22日"在ssdata数组中。如果你想要行号,请加1。
    • 当您使用日志中显示的结果时,a为7。

参考文献:

如果我误解了你的问题,我很抱歉。