【问题标题】:Is there a way to filter an array for strings in google apps script?有没有办法在谷歌应用脚​​本中过滤字符串数组?
【发布时间】:2021-06-16 17:59:04
【问题描述】:

我正在尝试过滤由 NaN 和一个字符串元素组成的数组“employee_name”,以排除除字符串之外的任何元素。上下文是我有一个包含员工出生日期的电子表格,并且我正在发送电子邮件通知,以防今天两天后有生日。我的变量如下所示:

var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Employees');
  var range = ss.getRange(2, 1, ss.getLastRow()-1, 1); // column containing the birth dates
  var birthdates = range.getValues(); // get the `values` of birth date column
  var today = new Date ();
  var today = new Date(today.getTime());
  var secondDate = new Date(today.getTime() + 48 * 60 * 60 * 1000);
  var employee_name = new Array(birthdates.length-1);

还有循环:

for (var i=0;i<=birthdates.length-1;i=i+1){

    var fDate = new Date(birthdates[i][0]);
if (fDate.getDate() == secondDate.getDate() && 
        fDate.getMonth() == secondDate.getMonth()){

        //define variables for outgoing email

        for (var j=0; j<=birthdates.length-1;j=j+1){
          employee_name[j] = [NaN];
        } 
        employee_name[i] = ss.getRange(i+2,6);
        employee_name[i] = employee_name[i].getValues();
}
}

之后有问题的数组看起来像这样

Logger.log(employee_name);

[[[Mia-Angelica]], [NaN], [NaN], [NaN], ..., [NaN]] 我已经尝试过过滤器(布尔),但这不起作用:

employee_name_filtered = employee_name.filter(Boolean);
Logger.log(employee_name_filtered);

返回 [[[Mia-Angelica]]、[NaN]、[NaN]、[NaN]、...、[NaN]]。 我也尝试用数值(而不是 NaN)填充非字符串数组条目,然后应用

employee_name_filtered = employee_name.filter(isFinite);
Logger.log(employee_name_filtered);

返回 [[1.0], [2.0], [3.0], ..., [72.0]],所以这个过滤器方法是有效的,但是我需要它的“逆”,因为我想保留字符串。

我需要数组中的数组将值存储在满足条件的计数器变量的位置(类似于How to store data in Array using For loop in Google apps script - pass array by value)。

这是我第一次在 SO 上发布问题,所以如果我忽略了任何关于发布的“规则”,请告诉我,我会提供更多信息。 任何帮助将不胜感激!

编辑:

我最终想要得到的只是 [[米娅-当归]]。

【问题讨论】:

  • 我认为在您的问题中,当您提供您期望的示例输入和输出值时,它将帮助用户了解您当前的脚本问题并思考解决方案。

标签: arrays google-apps-script filter boolean


【解决方案1】:

您正在使用二维数组的数组 - 这意味着它是一个数组数组,因此您正在使用的 filter 方法不能以相同的方式应用。

为此,我建议你试试下面的sn-p。

function cleanArray() {
    var initialArray = [
        ['Mia-Angelica'],
        ['Space'],
        ['2'],
        [NaN],
        [NaN],
        [NaN],
        [NaN]
    ];
    var finalArray = [];
    for (let i = 0; i < initialArray.length; i++) {
        var midArray = initialArray[i].filter(item => (Number.isFinite(item) && item.id !== 0) || !Object.is(item, NaN));
        finalArray.push(midArray);
    }
    console.log(finalArray.filter(item => item != ''));
}

注意

请记住,getValues 将返回一个 Object[][],它是一个二维值数组。

参考

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 2017-04-20
    • 1970-01-01
    相关资源
    最近更新 更多