【问题标题】:How can I use a array inside a include()如何在 include() 中使用数组
【发布时间】:2020-10-12 12:07:26
【问题描述】:

所以我有一个包含大约 300 个不同 URL 的电子表格。我在该电子表格中有第二张表格,其中包含大约 50 个域。这个想法是脚本扫描每个 URL 并检查域是否存在于域列表中。如果域存在,请给我找到的域总数。最后一部分正在运行。

但问题是域列表从 10 变为大约 90。所以今天是 50,但下周可能是 85。我不想写 85 的 if 语句。

我在想如果我可以在 include() 中放置一个数组,但我无法让它工作。

if(backlink.includes(startpaginaRows[])){
  startpaginaCount++;
}

这是我的脚本:

function backlinkAnalyse() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var backlinks = ss.getSheetByName("Backlinks").activate();
  var backlinksRows = ss.getDataRange().getValues();
  
  var startpagina = ss.getSheetByName("Types").activate();
  var lastRow = ss.getRange("A1:A").getValues();
  var lastRow = lastRow.filter(String).length;
  var startpaginaRows = ss.getRange("A2:A"+lastRow).getValues();
  
  var startpaginaCount = 1;
  
  var filteredRows = backlinksRows.filter(function(row){
    var backlink = row[1];
    if(backlink != ""){
      if(backlink.includes("startpagina.nl")){
        startpaginaCount++;
      }
      else if(backlink.includes("startkabel.nl")){
        startpaginaCount++;
      }
      else if(backlink.includes("goedbegin.nl")){
        startpaginaCount++;
      }
    }
  })
  var startpPaginaCount = startpaginaCount - 1;
  ss.getSheetByName("Linkprofiel").activate();
  ss.getRange("B2").setValue(startpaginaCount);
}

【问题讨论】:

  • 如果这将是一个成熟的项目。确保优化您的代码。你声明了许多你不在任何地方使用的变量:backlinksRowsbacklinksstartpagina另外,公认的解决方案不会利用您拥有所有独特网站的工作表。相反,他定义了一个硬拷贝的 url 数组,它根本不可维护,也没有使用 Types 表。如果您想利用 Types 工作表并且不想手动更新 backlinkPossibilites 数组,请查看我的答案。
  • 嗨马里奥斯,感谢您的重播。我删除了所有未使用的变量,谢谢。就阵法而言。我更改了这样的代码:var backlinkPossibilites = ss.getRange("A1:A").getValues();。因此,该数组由 Types 表中的值组成。回到家后,我会研究您的建议,看起来很有希望。

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


【解决方案1】:

据我了解,您想检查 startpaginaRows 中的值是否包含在某些 backlink 字符串中,您可以这样做:

var filteredRows = backlinksRows.filter(function(row){
    var backlink = row[1];
    if(backlink != ""){
      if(startpaginaRows.some((row) => backlink.includes(row))){
        startpaginaCount++;
      }
    }
  })

【讨论】:

    【解决方案2】:

    您不使用简单的谷歌表格公式有什么特别的原因吗?

    =COUNTIFS(Backlinks!$A:$A,Types!$A:$A,Backlinks!$A:$A,A1)

    输出:

    【讨论】:

      【解决方案3】:

      将您的 String.prototype.includes() 检查包装在 Array.prototype.some 循环中并提前保存一组可能的匹配项:

      function backlinkAnalyse() {
        var ss = SpreadsheetApp.getActiveSpreadsheet();
        var backlinks = ss.getSheetByName("Backlinks").activate();
        var backlinksRows = ss.getDataRange().getValues();
        var startpagina = ss.getSheetByName("Types").activate();
        var lastRow = ss.getRange("A1:A").getValues();
        var lastRow = lastRow.filter(String).length;
        var startpaginaRows = ss.getRange("A2:A" + lastRow).getValues();
        var startpaginaCount = 1;
        var filteredRows = backlinksRows.filter(function(row) {
          var backlink = row[1];
          var backlinkPossibilites = ["startpagina.nl", "startkabel.nl", "goedbegin.nl"];
          if (backlink != "") {
            if (backlinkPossibilites.some(function(pos) {
                return backlink.includes(pos);
              })) {
              startpaginaCount++;
            }
          }
        });
        var startpPaginaCount = startpaginaCount - 1;
        ss.getSheetByName("Linkprofiel").activate();
        ss.getRange("B2").setValue(startpaginaCount);
      }

      【讨论】:

        【解决方案4】:

        据我了解,您想了解数组 backlinkstartpaginaRows 是否相交。

        const backlink = ["a", "b", "c"];
        const startpaginaRows = ["c", "d", "e"];
        
        const doTheyIntersect = backlink.map(link => startpaginaRows.includes(link)).reduce((a, b) => a || b, false);
        
        if(doTheyIntersect) {
          console.log("They intersect");
        }

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-12-16
          • 2014-04-21
          • 1970-01-01
          • 2019-03-19
          • 1970-01-01
          • 1970-01-01
          • 2019-09-16
          • 2021-01-13
          相关资源
          最近更新 更多