Git Product home page Git Product logo

match's Introduction

wallride-match

Simple and powerful tool for checking if an object matches a pattern. TypeScript module definitions are already provided inside this package.


NPM License

Build Status Dependencies Dev dependencies

Basic usage

npm install wallride-match --save
import * as match from 'wallride-match'

const object = {
    id: 1,
    name: 'Foo'
};

match.check(object, {name:'Foo', id:1});
// returns true - Perfect match!

match.check(object, {id:1});
// returns true - ID is matching, that's enough

match.check(object, {name:'Foo'});
// returns true - Yes, this name fits too

match.check(object, {nonexistent:undefined});
// returns true - Yes, even so. This property is undefined in the provided object

match.check(object, {name:'Bar'});
// returns false - Oh no, that property doesn't match. Bad object!

Going deeper

The filtering object may have nested object that will be matched too.

const object = {
    id: 1,
    name: {first:'John', last:'Doe'}
};

match.check(object, {name:{}});
// returns true - Indeed. Formally name is an object... :)

match.check(object, {name:{first:'John'}});
// returns true - That guy suits us

match.check(object, {id:1, name:{first:'John', last:'Doe'}});
// returns true - That's the perfect match!

match.check(object, {name:{first:'John', last:'Smith'}});
// returns false - No, he is a stranger

Criteria matchers

Foy your convenience there are special objects (criteria) to determine if a value matches a pattern. They are in development right now, but you can use one universal criterion right away. Just see the following section.

Going more complex

Take a look at CustomCriterion that uses your function to check values:

const object = {
    id: 1,
    name: {first:'John', last:'Doe'}
};

match.check(object, {
    name: match.criteria.custom( value => {
        if (value instanceof Object){
            return !!(value.first && value.last)
        }
        return false;
    } )
});
// returns true - Yes. Both first and last names are present. No matter what they are

If you want to make your own criterion you may extend the AbstractCriterion class

class MyAwesomeCriterion extends match.AbstractCriterion {
    check(data: any): boolean {
        return true; // whatever
    }
}

match.check(someObject, {
    name: new MyAwesomeCriterion()
});

Filtering objects

Also you may select matching objects from array like this:

let objects = [
    {},
    {id:1},
    {id:2}
];
match.filter(objects, {id:1})
// returns [{id:1}]

Want more examples? Take a look into tests sources

match's People

Contributors

wallride avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.