【问题标题】:Google App Script formatted date Match in Array without iteratingGoogle App Script格式化日期匹配数组而不迭代
【发布时间】:2017-11-21 21:39:09
【问题描述】:

我正在尝试使用 findIndex 方法在列中查找第一次出现的日期,恰好是“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 

【问题讨论】:

  • 变量ssdata 是一个二维数组。尽管每个内部数组中只有一个值,但每个单元格值仍然存在一个内部数组。您可以使用以下命令将 2D 数组转换为 1D 数组:ssdata = ssdata.toString().split(","); 所以尝试这样做,然后查找 1D 数组中的值的匹配项。如果这不起作用,则正在搜索的日期值可能与数组中的格式不同,或者不存在。出于测试目的,您可能希望获得更少的数据,并确保数据中存在匹配项。

标签: date google-apps-script indexof


【解决方案1】:

这个答案怎么样?根据你的问题,我理解如下。

  • 您想使用字符串“MMM dd”检索日期的第一次出现(行号?)。
  • 您想了解如何使用indexOf() 检索值。

关于使用 indexOf() 从数组中检索值

  • 当您想使用indexOf() 从数组中检索值时,数组必须是一维数组。 Sandy Good 指出了这一点。
  • 当使用indexOf() 从一维数组中检索值时,它不会检索包含在每个元素中的值,而是检索每个元素的相同值。
    • ["foo", "bar", "baz"].indexOf("ba") 是 -1。
      • 这意味着数组中的每个元素都没有“ba”。
    • ["foo", "bar", "baz"].indexOf("bar") 是 1。
      • 这意味着在数组的索引 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);
  • assdata 数组中包含“Nov 22”值的索引。如果你想要行号,请加1。
    • 使用日志中显示的结果时,a 为 7。

参考资料:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 1970-01-01
    相关资源
    最近更新 更多