Home

Awesome

JavaScript Object Query

DSL for JavaScript arrays of objects querying

Usage examples

Initial data that will be queried

  var entireData = [
        { name: 'Bob', id: 1, age: 20 },
        { name: 'Rob', id: 2, age: 42 },
        { name: 'Tim', id: 3, age: 21 },
        { name: 'Hap', id: 4, age: 54 },
        { name: 'Ted', id: 5, age: 43 },
        { name: 'Sam', id: 6, age: 20 },
        { name: 'Liz', id: 7, age: 21 }
  ];

from()

new Jql().from(entireData).where('age >= ?', 25).query() or new Jql(entireData).where('age >= ?', 25).query()

[
    { name: 'Rob', id: 2, age: 42 },
    { name: 'Hap', id: 4, age: 54 },
    { name: 'Ted', id: 5, age: 43 }
]

where()

new Jql(entireData).where('age >= ?', 25).order('age').query() or as a function:

new Jql(entireData).where(function(dataItem) {
    return dataItem.age >= 25;
}).order('age').query()


[
    { name: 'Rob', id: 2, age: 42 },
    { name: 'Ted', id: 5, age: 43 },
    { name: 'Hap', id: 4, age: 54 }
]

limit()

new Jql(entireData).where('age >= ?', 25).limit(2).query()

[
    { name: 'Rob', id: 2, age: 42 },
    { name: 'Hap', id: 4, age: 54 }
]

offset()

new Jql(entireData).where('age >= ?', 25).offset(1).query()

[
    { name: 'Hap', id: 4, age: 54 },
    { name: 'Ted', id: 5, age: 43 }
]

select()

new Jql(entireData).where('age >= ?', 25).select('name').query()

['Rob', 'Hap', 'Ted']

scope()

You're able to create a scopes. It stores all query options within new query model:

var q1 = new Jql(entireData).where('age >= ?', 25);
var q2 = q1.scope();

q1.where('name != 'Rob').query()
[
    { name: 'Hap', id: 4, age: 54 },
    { name: 'Ted', id: 5, age: 43 }
]

q2.where('name != ?', 'Hap').order('age')
[
    { name: 'Rob', id: 2, age: 42 },
    { name: 'Ted', id: 5, age: 43 }
]

This means that when you create a scope you get a brand new query selector based on another one.

Scopes could be usefull if you want to apply save queries options for different data sets

var searchScope = new Jql().select('name').where('age > ', 20).where(function(dataItem) {
    return dataItem.name.match(/[a-z]$/);
}.order('age', true).limit(10).scope();

searchScope.from(dataSet1).query();
searchScope.from(dataSet2).query();
searchScope.from(dataSet3).offset(1).query();