Javascript 如何将数组从两列筛选为非空对?

Javascript 如何将数组从两列筛选为非空对?,javascript,google-apps-script,google-sheets,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 Vari

有了下面的代码,我就有了一个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个值是key>value对,所以如果a:a中有一个值,那么B:B中也有一个值。如果a:a中有null,那么B:B就是null

我做错了什么?

事实上,
[[“”,”“],[“”,”“]]。过滤器(字符串)
返回整个数组。要查看原因,请将
过滤器
替换为
映射

[["", ""], ["", ""]].map(String)  //  [",", ","]
这些是真实的字符串,带有逗号

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

range.getValues().filter(function(row) {return row[0]})
(通常关于0值为falsy的警告适用,但看起来不会遇到数字0,列为文本。字符串“0”是真实的。)


(另外,“null”在这里不是正确的术语,应用程序脚本为空单元格返回空字符串“”,这与
null

尝试Lsheet.getRange(“A2:B”+Lsheet.getLastRow())。当然,如果您将范围定义为整个B列,它将返回每个单元格中的所有值,而不管它是否为空字符串。谢谢,@if!将“getValues().filter(函数(行){return row[0]})”放在范围之后,完美地过滤掉了字符串。这是否也适用于基于[]中索引的任何大小的范围?是。对于任何范围
getValues
返回一个双数组,如
[[1,2,3],[4,5,6]
。当您对其应用
filter
时,筛选函数将获得一行作为其参数,例如
[1,2,3]
。因此,您必须决定要查看行的哪个元素,以及标准应该是什么<代码>行[0]表示根据范围的第一列进行过滤<代码>行[2]将是第三列。