Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 在数组上循环第一次后,数组中的日期将丢失格式_Google Apps Script - Fatal编程技术网

Google apps script 在数组上循环第一次后,数组中的日期将丢失格式

Google apps script 在数组上循环第一次后,数组中的日期将丢失格式,google-apps-script,Google Apps Script,我正在从URL中提取CSV数据。 我已将其解析为一个名为“data”的变量。看起来是这样的: [ [ID, Sometext (dd-MM-YYYY), Othertext (dd-MM-YYYY), Whatevertext (dd-MM-YYYY)], [1, yes, no, no], [2, yes, yes, no], [3, no, yes, no], etc... ] 如果某个文本出现在第一个数组(csv标题)中,则应为其分配另一个文本。 日期不是按时间顺序排列的,但应该按时

我正在从URL中提取CSV数据。 我已将其解析为一个名为“data”的变量。看起来是这样的:

[
[ID, Sometext (dd-MM-YYYY), Othertext (dd-MM-YYYY), Whatevertext (dd-MM-YYYY)],
[1, yes, no, no],
[2, yes, yes, no],  
[3, no, yes, no],
etc...
]
如果某个文本出现在第一个数组(csv标题)中,则应为其分配另一个文本。 日期不是按时间顺序排列的,但应该按时间顺序排列

我做了一个循环来检查标题,提取日期,将其更改为日期类型,并根据需要替换文本。将这两个值放入一个数组,并使用排序函数按日期对数组进行排序

[
[Thu Aug 27 00:00:00 GMT+02:00 2020, Text1], [Fri Aug 28 09:00:00 GMT+02:00 2020, Text2], [Sat Aug 29 09:00:00 GMT+02:00 2020, Text3]
etc.
]
接下来,我将在以下行上循环,如果值等于yes,我将向该ID的数组中添加新的头值。在迭代结束时,我希望将日期类型转换回dd-MM-YYYY格式

在第一次迭代中,这工作得很好。但是在第二次迭代中,它给出了一个错误,因为日期不再是日期类型

现在我知道这对于多个嵌套循环来说是非常难看的,但据我所知,数据[0]中的值的更改是在下一组循环开始之前完成的。新值在第一次迭代中出现,但在第二次迭代中不出现。我不明白为什么

var response = UrlFetchApp.fetch(url);

var data = Utilities.parseCsv(response, ";")

for (var i = 7; i < data[0].length; i++) {
  
    var type;
    
if (/text1/.test(data[0][i]) === true) {
        type = "Text 1";
    } else if 
      (/text2/.test(data[0][i]) === true) { 
      type = "Text 2";
      } else if 
        (/text3/.test(data[0][i]) === true) {
      type = "Text 3";
        } else if 
          (/text4/.test(data[0][i]) === true) {
      type = "Text 4";
          } else if 
      (/text5/.test(data[0][i]) === true) { 
      type = "Text5";
      };
                
    data[0][i] = data[0][i].match(/\(([^)]+)\)/)[1]
    
    var dateParts = data[0][i].split("-");
data[0][i] = [new Date(+ dateParts[2], dateParts[1] - 1, + dateParts[0], 9, 0 ,0)];

    data[0][i].push(type)
    }; 
  
   
  var idsArray = [];
  
  for (var j = 1; j < data.length; j++) {

   var id = [];

    for (var k = 7; k < data[j].length; k++) {
      if (data[j][k] === "yes") {
        id.push(data[0][k])
      };
           
      };
        

    id.sort(sortFunction);   
  
  
    
for (var m = 0; m < id.length; m++) {
 id[m][0] = Utilities.formatDate(id[m][0], "Europe/Amsterdam", "dd-MM-yyyy");
  }

     id.unshift(data[j][3]);
      idsArray.push(id);
   
    }
var response=UrlFetchApp.fetch(url);
var data=Utilities.parseCsv(响应“;”)
对于(var i=7;i
当您在语句中使用

id[m][0]=Utilities.formatDate(id[m][0],“欧洲/阿姆斯特丹”,“dd-MM-yyyy”);
您正在将
id[m][0]
中存储的数据的数据类型从
Date
更改为
string

id[m][0]
中存储的数据是什么?您将
数据[0][k]
放入其中:

id.push(data[0][k])
现在的问题是,它是否从
data
复制了
Date
,并为
id
数组提供了一个新的
Date
?不,JavaScript不复制对象;您只需要引用存储在
数据
数组中的原始
日期
对象


因此,您通过更新一些您认为是独立的其他数组(
id
),间接地改变了
数据中的值

更新变异语句,以避免覆盖现有对象

var dateString=Utilities.formatDate(id[m][0],“欧洲/阿姆斯特丹”,“dd-MM-yyyy”);
当您在语句中使用

id[m][0]=Utilities.formatDate(id[m][0],“欧洲/阿姆斯特丹”,“dd-MM-yyyy”);
您正在将
id[m][0]
中存储的数据的数据类型从
Date
更改为
string

id[m][0]
中存储的数据是什么?您将
数据[0][k]
放入其中:

id.push(data[0][k])
现在的问题是,它是否从
data
复制了
Date
,并为
id
数组提供了一个新的
Date
?不,JavaScript不复制对象;您只需要引用存储在
数据
数组中的原始
日期
对象


因此,您通过更新一些您认为是独立的其他数组(
id
),间接地改变了
数据中的值

更新变异语句,以避免覆盖现有对象

var dateString=Utilities.formatDate(id[m][0],“欧洲/阿姆斯特丹”,“dd-MM-yyyy”);

“您通过更新您认为独立的其他数组(id)间接地改变了数据中的值。”“您通过更新您认为独立的其他数组(id)间接地改变了数据中的值。”