【问题标题】:TypeError: Cannot read property '0' of undefined - Google app scriptTypeError:无法读取未定义的属性“0” - Google 应用脚本
【发布时间】:2021-02-17 12:40:47
【问题描述】:

我有一个获取日期并保存它们的代码和一个数组,以便在另一个函数中使用它来发出 POST 请求。我在将这些日期传递到发布请求中时遇到了挑战,并且不断收到错误无法读取未定义的属性“0”。我将不胜感激。

日期代码:

function getDate(){

 var dateArray = [];
 var date1= new Date(2021,2,15);
 var date2 = new Date(2021,3,15);

 Set the current date to the starting date 
 var date = date1; 
 
 while(date<=date2){

   dateArray.push(date);
   date.setDate(date.getDate()+1);
 }

 return(dateArray);
}


function user_assignments()
{
  var user = getUsers()

  var assign_arr = [];

  for (var i = 0; i < user.length; i++)
  {
    var url = 'https://api.10000ft.com/api/v1/users/' + user[i].ID + '/assignments?auth=' + tkft_token + '&from=' + start + '&to=' + end
    var response = UrlFetchApp.fetch(url, options);
    var info = JSON.parse(response);
    var content = info.data;


    if (content.length > 0)
    {
      for (var j = 0; j < content.length; j++)
      {
        var rec = {}
        rec.user_id = content[j].user_id
        rec.assignable_id = content[j].assignable_id
//        rec.ends_at = content[j].ends_at
        assign_arr.push(rec)

      }
    }


  }

  return assign_arr;
}

POST 请求代码:

function clear_demo(date)
{
var user_dt = user_assignments()
var usedates = getDate()

for (var i = 0; i < user_dt.length; i++)
  {

     var data = {

      'hours': 0,
      'date': usedates[i],//Having challenge here
      'user_id': user_dt[i].user_id,
      'assignable_id': user_dt[i].assignable_id,
    };
    var payload = JSON.stringify(data);
    var options = {
      'method': 'POST',
      'Content-Type': 'application/json',
      'payload': data,
    };

【问题讨论】:

  • 虽然我不确定这是否是您问题的直接解决方案,例如,当您将'Content-Type': 'application/json', 修改为'contentType': 'application/json', 以及将'payload': data, 修改为'payload': payload, 时,结果如何你会得到吗?
  • @Tanaike 感谢您查看此内容。实际上,这里的挑战是将获取日期数组传递给“函数 clear_demo”。我使用 'var usedates = getDate()' 调用了日期函数,但无法将其传递给 'var data' 希望我说得通?
  • 感谢您的回复。在您的脚本中,我认为可能需要修改 dateArray.push(date)。因为在这种情况下,我担心值是引用调用。所以请将dateArray.push(date)修改为dateArray.push(new Date(date))。这样,从 2021 年 3 月 15 日到 2021 年 4 月 15 日的日期被放入数组中。我认为这可能是您当前问题的答案。
  • 但我不确定您要使用的 API。所以我不确定你的请求是否正确,可以直接使用'date': usedates[i],。所以如果这个修改没有达到你的目标,你能提供你想要使用的 API 的详细信息吗?通过这个,我想修改它。
  • 感谢有关日期的建议。现在,我想遍历 'dateArray.push(new Date(date))' 中的日期并将它们传递到 ''date': usedates[i]' 行中。我该怎么做?

标签: javascript arrays date google-apps-script google-sheets


【解决方案1】:

您正在使用对象 data,而不是 JSON payload 作为选项。

    var payload = JSON.stringify(data);
    var options = {
      'method': 'POST',
      'Content-Type': 'application/json',
      'payload': payload, // was 'data'
    };

【讨论】:

    【解决方案2】:

    这还不是一个完整的答案,但会根据您的反馈进行编辑。因为对cmets的解释太长,所以在这里发布。

    我已经对您的代码进行了试验,并调整了这个小 sn-p 来测试 usedates[i] 是否有效。

    function getDate() {
      var dateArray = [];
      var date1 = new Date(2021, 2, 15);
      var date2 = new Date(2021, 3, 15);
    
      var date = date1;
    
      while (date <= date2) {
        dateArray.push(date);
        date.setDate(date.getDate() + 1);
      }
    
      return dateArray;
    }
    
    function clear_demo(date) {
      var usedates = getDate();
    
      for (var i = 0; i < usedates.length; i++) {
        var data = {
          date: usedates[i]
        };
        console.log(JSON.stringify(data));
      }
    }
    
    clear_demo();
    

    这可以正常工作,并在控制台上给出这个结果:

    {"date":"2021-04-15T22:00:00.000Z"} 
    

    这个相同的结果,32 次。

    其相同的原因是每次您dateArray.push(date); 您只是推送对同一日期对象的引用。您需要将其更改为 dateArray.push(new Date(date.getTime()));

    但这不是您面临的问题。您是说此代码在date: usedates[i] 行上返回错误TypeError: Cannot read property '0' of undefined - 但这并没有给我任何错误。你确定它在这条线上失败了吗?可能不是因为user_dt[i] 因某种原因失败了?

    assign_arruser_assignments() 的末尾记录了什么?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多