Skip to content
/ filter.js Public

JS package that enables you to formulate complex conditions in a convenient string syntax which can then be matched with objects and further query a JSON array.

License

Notifications You must be signed in to change notification settings

mg98/filter.js

Repository files navigation

filter.js

Filter JSONs using SQL-like syntax!


filter.js is a lightweight JavaScript library that enables you to use a comprehensible string syntax to run complex filter operations on a set of JSONs (or only one for that matter). The syntax is strongly inspired by the syntax for the expression of conditions in SQL and is meant to be simple and intuitive, even for non-technical people. See a demo!

Install

npm i @mg98/filter-js

Example

import { matchCondition } from '@mg98/filter-js';

const clients = [
    {
        name: 'Batu',
        age: 17,
        country: 'Turkey'
    },
    {
        name: 'Hai Dang',
        age: 24,
        country: 'Vietnam'
    },
    {
        name: 'Miles',
        age: 16,
        country: 'USA'
    },
    {
        name: 'Philipp',
        age: 58,
        country: 'Germany'
    }
]

const alcoholClients = clients.filter(client => matchCondition(client, 
  "(age >= 18 and country in ('Germany', 'Turkey', 'Vietnam') or age >= 21 and country = 'USA') and country != 'Arabia'"
))

console.log(alcoholClients)
// [
//     {
//         name: 'Hai Dang',
//         age: 24,
//         country: 'Vietnam'
//     },
//     {
//         name: 'Philipp',
//         age: 58,
//         country: 'Germany'
//     }
// ]

Features

The goal of filter.js is to create a language that is not only a powerful tool, but also a convenient and fault-tolerant one.

✅ Basic comparison operators =, !=, >, <, >=, <=

✅ Operators in and not in in combination with array values (('Apple', 'Peach', 'Banana'))

✅ Supports value types string and number (including floating values)

✅ Supports operations on arrays (e.g. hobbies > 3 is valid if hobbies in an array of length > 3)

✅ Logical operators and and or to combine expressions

✅ Deep property access (e.g. address.street = 'Elm Str')

✅ Nested expressions using parentheses

Not yet supported...

❌ Boolean type

❌ Understanding of date & time

Usage in Browser

A compiled and browserified version of this library is available at

This will give you the latest version.

However, to avoid the risk of breaking changes in a new version, it is recommended to target a specific release tag, e.g. https://filter.js.org/tags/v0.4.2/bundle.min.js.

Example

<script src="https://filter.js.org/bundle.min.js"></script>
<script>
  const clients = [ /* ... */ ]

  const alcoholClients = clients.filter(client => filterjs.matchCondition(client, 
    "(age >= 18 and country in ('Germany', 'Turkey', 'Vietnam') or age >= 21 and country = 'USA') and country != 'Arabia'"
  ))
</script>

About

JS package that enables you to formulate complex conditions in a convenient string syntax which can then be matched with objects and further query a JSON array.

Topics

Resources

License

Stars

Watchers

Forks