javascript - JS过滤功能。这个说法

标签 javascript google-apps-script

早上好,

我一直在尝试过滤函数的一些语法,但我无法理解为什么特定情况没有过滤。

最终目标是从我的电子表格中获取一个范围,并使用该函数传递一个值以在该范围内过滤掉。

以下示例代码运行良好

----(这正确删除了值 6,结果数组为 [0,5,8,0,88,0])

{var range = [0,5,8,0,88,6,0]

function filtro (excl) {
  return excl != this;
}

var range = range.filter(filtro,6)}

---- 在下面的代码中,我已将相同的数组移动到谷歌表格,并且代码也正确返回 [0,5,8,0,88,0]

  function advancedFilter(){

  var ss = SpreadsheetApp.getActiveSpreadsheet();

  var sheet = ss.getSheetByName("Testes");

  var range = sheet.getRange("A3:A9").getValues();


  function filtro (excl) {
  return excl != 6;
}

  var range = range.filter(filtro)
}

--- 然而,当我合并上面的两个想法时,最后一段代码失败并返回 [0,5,8,0,88,6,0],范围不变

function advancedFilter(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  var sheet = ss.getSheetByName("Testes");

  var range = sheet.getRange("A3:A9").getValues();

  function filtro (excl) {
  return excl != this;
}

  var range = range.filter(filtro,6)
}

有什么提示吗?

最佳答案

这里的问题是 result of sheet.getRange("A3:A9").getValues() is an array of arrays of objects 。你说你正在过滤数组 [0,5,8,0,88,6,0] 但它的结构实际上是一个数组的数组,里面有对象: [[new Number (0)],[新号码(5)],[新号码(8)],[新号码(0)],[新号码(88)],[新号码(6)],[新号码(0) )]]

这解释了为什么您的 excl != 6 测试能够正确过滤 [new Number(6)],因为 [new Number(6)] != 6 实际上是false。对于与数字原语的非严格比较,左侧数组将转换为其内容的字符串表示形式,在本例中为 "6" (这是 new 的字符串表示形式)数字(6))。在非严格比较中,"6" 等于 6,因此不等运算 != 会产生 false

excl != this 检查失败,因为 filter 将其 thisArg 强制为一个对象,所以它就像 new Number(6 )。由于数组和 Number 对象都是对象,因此 JavaScript 不会进行类型强制,只是检查运算符两侧是否有相同的对象。在本例中,它们是两个不同的对象,因此不等运算 != 产生 true

  • 您可以使用一元 + 运算符将 this 重新转换为数字基元:excl != +this
  • 此外,您可以通过从文件管理器考虑的数组中取出第一个元素(因为您的输入无论如何都只有一列)并将其转换为原语来进行更清晰的比较:+excl[0] != +这个
  • 最后,由于现在双方都是原语,因此您可以使用严格比较:+excl[0] !== +this

关于javascript - JS过滤功能。这个说法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46284489/

相关文章:

javascript - 在函数中插入 'continue' 语句,稍后在另一个函数中调用 'For loop' 语句

php - 如何解决PHPSpread工作表未找到错误

Javascript 单例 : How to access private variables?

javascript - 检测浏览器加载的 JSON

javascript - 如何指定应在 Visual Studio Code 中创建的默认 .editorconfig 文件?

google-apps-script - 如何获取所有附有特定标签的草稿消息

javascript - 谷歌应用脚​​本: open document from menu

javascript - 使用 JavaScript 和 Angular.JS 在表中不规则重复

google-apps-script - 用于在下一个空白行中设置值的 Google Apps 脚本代码

google-apps-script - 如何将自定义函数与 FILTER 一起使用?