简介
opencadc-votable-filter-engine是一个用于JavaScript操作VOTable的过滤引擎。它提供了一组简单而又强大的API,使得用户可以轻松地自定义VOTable的过滤器。
对于那些需要对VOTable进行过滤的前端开发人员和数据科学家来说,这个npm包将是一个非常有用的工具。
安装
在使用opencadc-votable-filter-engine之前,你需要先安装Node.js和npm。npm是Node.js的包管理器,可以轻松地下载和安装所需的包。
在终端中运行以下命令即可安装opencadc-votable-filter-engine:
npm install opencadc-votable-filter-engine
使用方法
引入
首先,你需要在你的JavaScript文件中引入opencadc-votable-filter-engine:
const { VOTableFilterEngine } = require('opencadc-votable-filter-engine')
创建实例
使用VOTableFilterEngine必须创建一个类实例:
const engine = new VOTableFilterEngine()
过滤器
opencadc-votable-filter-engine提供了一组非常强大的过滤器API,以满足各种各样的过滤需求。这些函数可以用于创建构建过滤器表达式树和操作和评估表达式树的节点。
以下是一些常用的过滤器API:
and
使用“and”过滤器将两个或多个过滤器同时应用于表格数据。例如,以下代码将查找所有电影名称包含“Star Wars”并且出版年份在2000年后的电影:
const filter1 = engine.contains('title', 'Star Wars') const filter2 = engine.greaterThan('year', 2000) const compoundFilter = engine.and(filter1, filter2)
or
使用“or”过滤器将两个或多个过滤器应用于表格数据,并返回任何一个过滤器匹配的行。例如,以下代码将查找所有英国或美国男演员出演的电影:
const filter1 = engine.equalTo('country', 'UK') const filter2 = engine.equalTo('country', 'USA') const actorFilter = engine.or(filter1, filter2) const filter3 = engine.equalTo('gender', 'male') const compoundFilter = engine.and(actorFilter, filter3)
greaterThan
使用“greaterThan”过滤器可以比较数值列并查找大于特定值的行。例如,以下代码将查找发行年份在2000年后的所有电影:
const filter = engine.greaterThan('year', 2000)
lessThan
使用“lessThan”过滤器可以比较数值列并查找小于特定值的行。例如,以下代码将查找发行年份在2000年前的所有电影:
const filter = engine.lessThan('year', 2000)
contains
使用“contains”过滤器可以查找特定列中包含特定字符串的行。例如,以下代码将查找所有电影名称包含“Star Wars”的电影:
const filter = engine.contains('title', 'Star Wars')
equalTo
使用“equalTo”过滤器可以查找特定列中的内容与特定值匹配的行。例如,以下代码将查找所有出版年份为1999年的电影:
const filter = engine.equalTo('year', 1999)
startsWith
使用“startsWith”过滤器可以查找特定列中以特定字符串开头的行。例如,以下代码将查找所有以“The”开头的电影名称:
const filter = engine.startsWith('title', 'The')
endsWith
使用“endsWith”过滤器可以查找特定列中以特定字符串结尾的行。例如,以下代码将查找所有以“Wars”结尾的电影名称:
const filter = engine.endsWith('title', 'Wars')
运算符
opencadc-votable-filter-engine还提供了一组运算符,用于对过滤器表达式树中的节点进行操作。以下是一些常用的运算符:
not
使用“not”运算符可以对节点结果的结果求反。例如,以下代码将查找所有不是星战系列电影的电影:
const filter1 = engine.contains('title', 'Star Wars') const notFilter = engine.not(filter1)
and
使用“and”运算符将两个或多个节点的结果进行逻辑“与”运算。例如,以下代码将查找所有英国或美国男演员出演的电影:
const filter1 = engine.equalTo('country', 'UK') const filter2 = engine.equalTo('country', 'USA') const actorFilter = engine.or(filter1, filter2) const filter3 = engine.equalTo('gender', 'male') const compoundFilter = engine.and(actorFilter, filter3)
or
使用“or”运算符将两个或多个节点的结果进行逻辑“或”运算。例如,以下代码将查找所有动作或冒险电影:
const filter1 = engine.contains('genres', 'Action') const filter2 = engine.contains('genres', 'Adventure') const compoundFilter = engine.or(filter1, filter2)
评估
一旦创建了VOTableFilterEngine过滤器表达式树和节点,就可以使用evaluate函数对其进行评估。evaluate函数以VOTable行对象作为参数,并返回true或false,表示该行是否符合过滤器条件。
-- -------------------- ---- ------- ----- ------ - --- --------------------- ----- ------ - ------------------------ ----- ------ ----- ---- - - - ------ ----- ----- ------- -- - - --- ------ ----- ---- -- - ------ ---- -------- ----- ---- -- - ------ ------ -------- ----- ---- -- - ------ ----- ----- ------- - - --- ------ ------- ------ ----- ---- -- - ---------------- -- - -- ------------------------ ----- - ---------------- - --
示例代码
以下代码是一个使用VOTableFilterEngine的完整示例:
-- -------------------- ---- ------- ----- - ------------------- - - ----------------------------------------- ----- ------ - --- --------------------- ----- ------- - ------------------------ ----- ------ ----- ------- - -------------------------- ----- ----- -------------- - ------------------- -------- ----- ---- - - - ------ ----- ----- ------- -- - - --- ------ ----- ---- -- - ------ ----- ----- ------- -- - ------ -- --- -------- ----- ---- -- - ------ ----- ----- ------- - - --- ------- -------- ----- ---- -- - ------ ----- ----- ------- - - --- ------ ------- ------ ----- ---- -- - ---------------- -- - -- -------------------------------- ----- - ---------------- - --
该示例将输出以下结果:
{ title: 'Star Wars: Episode II - Attack of the Clones', year: 2002 }
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005591e81e8991b448d6916