javascript - 如何将数组从两列过滤为非空对?

标签 javascript google-apps-script google-sheets

通过下面的代码,我有一个 Google 表格,并且我正在尝试从不同部分创建数组。

function onFormSubmitTest(e) {
    //Open spreadsheet based on URL
    var ss = SpreadsheetApp.openByUrl('sheetnamehere');
    //Set as Active
    SpreadsheetApp.setActiveSpreadsheet(ss);
    //Set Tabs as Variables
    var Rsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Emailer");
    var Lsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Unique Databases");

    //----Set last Rows as Variables----
    // Gets Values from different sections
    var formResponses = Rsheet.getRange("N3:N").getValues();
    var databaseNames = Lsheet.getRange("A2:B").getValues();
    var developerNames = Lsheet.getRange("F2:F").getValues();

    // Filters to ranges that have values, ignores null
    var lastRvalues = formResponses.filter(String);
    var lastLvalues = databaseNames.filter(String);
    var lastDvalues = developerNames.filter(String);

    // Sorts arrays for faster indexing
    var lastR = lastRvalues.sort();
    var lastL = lastLvalues.sort();
    var lastD = lastDvalues.sort();

    // Unique Databases
    var currentDatabases = lastL;

    // Current Developers
    var currentDevelopers = lastD

在“唯一数据库”选项卡上,工作表上有 100 行,其中只有 28 行有数据。如果我有下面的代码,我可以看到它只有预期的 28 个值:

var databaseNames = Lsheet.getRange("A2:A").getValues();

但是,当我添加另一列时,我得到 100 个值,其中绝大多数是 ["", ""]。需要注意的是,这 28 个值是键 > 值对,因此如果 A:A 中有一个值,B:B 中也会有一个值。如果 A:A 中为 null,则 B:B 为 null。

我做错了什么?

最佳答案

事实上,[["", ""], ["", ""]].filter(String) 返回整个数组。要了解原因,请将 filter 替换为 map:

[["", ""], ["", ""]].map(String)  //  [",", ","]

这些是真实的字符串,带有逗号。

通过范围第一列的非空性来过滤文本的正确方法是

range.getValues().filter(function(row) {return row[0]})

(关于 0 值是假值的常见警告适用,但看起来您不会在那里遇到数字 0,该列是文本。字符串“0”是真值。)

(此外,“null”在这里不是正确的术语,Apps 脚本为空单元格返回空字符串“”,这与 null 不同)

关于javascript - 如何将数组从两列过滤为非空对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48241122/

相关文章:

javascript - 如何在 Angular 中设置未知高度的动画?

javascript - CSS中的多个弹出窗口层位置

javascript - Bootstrap 模式弹出窗口不会关闭

google-apps-script - 向数据透视表添加过滤器

google-apps - 如何在使用 Google Apps 脚本迭代 Google 电子表格时跳过隐藏的行

javascript - 如何将 API 响应映射到 Google Sheet

javascript - 通过 AJAX 请求提交时显示未定义值的 Google 电子表格

关闭窗口的Javascript调用

javascript - 日历服务: Store and retrieve events using PropertiesService

javascript - 如何在 html ref 标签中获取谷歌应用程序脚本函数/变量