【问题标题】:"push is not a function" error in Google App ScriptGoogle App 脚本中的“推送不是函数”错误
【发布时间】:2020-06-30 12:21:36
【问题描述】:

我有一个代码应该读取谷歌表格并将它们推送到一个数组中,但我一直遇到 proData.push 不是函数的错误我在这段代码中可能缺少什么?

function getData() {
  var values = SpreadsheetApp.getActive().getSheetByName("Projects").getRange("A1:O").getValues();
  values.shift(); 
  var proData = [];
  values.forEach(function(value) {
    var proData = {};
    proData.project_state = value[0];
    proData.project_name= value[4];
    proData.project_code= value[5];
    proData.end_date= value[2];
    proData.push(proData);
  })
  Logger.log(JSON.stringify(proData));
  return proData;
}

我将感谢您在查看此内容时提供的帮助。

【问题讨论】:

  • 您希望proData.push(proData); 做什么?

标签: javascript arrays loops google-apps-script


【解决方案1】:

这句话讲述了整个故事:

proData.push(proData);

你想把一个物体推到自己身上吗?显然,这表明有问题。那么让我们看看你在哪里定义proData

var proData = {};

这至少解释了错误。 proData 是一个对象,而不是一个数组。而且对象确实没有名为push 的函数。你可能认为它是一个数组,因为你在这里定义了一个同名的数组:

var proData = [];

但是对于您调用.push 的行,系统如何知道您打算使用哪个变量用于什么目的?在更高的范围内,您有一个名为 proDataarray,但在此操作的当前范围内,您使用名为 proDataobject 来掩盖它。这样做会使数组在传递给.forEach的函数范围内无法访问。

为避免在这件事上混淆 JavaScript 引擎和您自己,只需使用不同的变量名即可。在较小的范围内重命名变量的影响较小,因此这是一个不错的选择。 (虽然它并不总是最好的选择。如果更高范围内的变量在语义上不清楚它包含什么,那么它应该被重新命名。)

类似这样的:

values.forEach(function(value) {
  var pd = {};
  pd.project_state = value[0];
  pd.project_name = value[4];
  pd.project_code = value[5];
  pd.end_date = value[2];
  proData.push(pd);
});

【讨论】:

    猜你喜欢
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多