javascript - 应用脚本 : filter out empty elements from array

标签 javascript google-apps-script

enter image description here

我有以下功能:

  var rows = sheet2Json(sheet);

  var emails = rows.filter(function (el) { //ONLY CHECKED ROWS.
         return el != "";
    })
               .map(function (row) { //ONLY CHECKED ROWS.
      return row['EMAIL'];
    });  



  Logger.log(emails)
  return (emails);
}

rows 在对象数组中生成工作表,如下所示:

[{ EMAIL=xxx,  TEMPLATE=CONSULT, Index=Thu Jan 24 16:26:02 GMT-05:00 2019 }
...
]

我想要一个过滤掉空行的所有电子邮件的数组。通过上面的代码我得到:

[ K@DF.COM, K@DF.COM,  , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ]

如何去掉空行?

最佳答案

您必须先获取EMAIL属性,然后过滤空或未定义的条目:

var rows = [
  { EMAIL: 'a@b.com', prop: 'bla' },
  { EMAIL: '', prop: 'bla' },
  { EMAIL: undefined },
  { EMAIL: 'd@b.com', prop: 'bla' },
  { },
  undefined
];

var emails = rows
  .map(function (row) { return row && row.EMAIL; })
  .filter(Boolean);

console.log(emails);

它无法以其他方式工作的原因是您需要过滤掉空的 EMAIL 字段,但是您通过将行与空字符串进行比较来过滤行。空行 ({}) 将无法通过过滤器测试。

要使其以其他方式工作,您需要首先根据行的 EMAIL 属性过滤行,然后映射:

var rows = [
  { EMAIL: 'a@b.com', prop: 'bla' },
  { EMAIL: '', prop: 'bla' },
  { EMAIL: undefined },
  { EMAIL: 'd@b.com', prop: 'bla' },
  { },
  undefined
];

var emails = rows
  .filter(function (row) { return row && row.EMAIL; })
  .map(function (row) { return row.EMAIL; });

console.log(emails);

关于javascript - 应用脚本 : filter out empty elements from array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55054012/

相关文章:

javascript - Angular 2 和 AmCharts

javascript - 从javascript代码访问php变量

javascript - YUI3调用一个函数

google-apps-script - 如果您将月份计时器触发器设置为在没有 31 天的月份的 31 日触发,会发生什么情况?

javascript - GAS - 等待用户输入数据,然后功能继续

javascript - 从 gmail 线程中的 ZIP 文件中提取 CSV 并将数据写入 Google 表格

javascript - 循环遍历一列并根据 Google Apps 脚本中的单元格值更改另一列的值

javascript - trim 长导航,如果它离开屏幕

google-apps-script - 如果单元格更改,则发送电子邮件通知

javascript - WebGL。它是在 GPU 中创建缓冲区吗?