json-query-chain/README.md
2018-03-18 17:46:11 -05:00

103 lines
2 KiB
Markdown

# json-query-chain
[![Build Status](https://travis-ci.org/sharpshark28/json-query-chain.svg?branch=master)](https://travis-ci.org/sharpshark28/json-query-chain) [![npm version](https://badge.fury.io/js/json-query-chain.svg)](https://badge.fury.io/js/json-query-chain) ![Code Coverage](coverage.svg) [![Maintainability](https://api.codeclimate.com/v1/badges/4dc20d8b5e6a7334044d/maintainability)](https://codeclimate.com/github/sharpshark28/json-query-chain/maintainability)
Chain queries onto arrays and arrays of objects to return precise results. See [example usages in the tests](./index.test.js) running on [this test data](./testdata.json).
## Usage
```javascript
import Query from 'json-query-chain';
let query = new Query(someJsonData)
.search('isActiveUser', true)
.results;
console.log('Results: ', query);
```
### Chainable Methods
#### Search
##### By Boolean
Acts as a smart filter returning only elements who's key matches the expected result.
```javascript
.search(true, 'isActiveUser')
```
##### By String
Sorts and filters out any elements in the array not matching the requested value while attempting to raise the best results to the top (most frequent number of occurrences).
```javascript
.search('steele', 'name')
```
#### Filter
Simpler version of search using a custom function in the chain.
```javascript
.filter(a => a.age >= 21)
```
##### By Key
Like `.filter()`, but narrowed down by key.
```javascript
.filterBy('age', x => x >= 21)
```
#### Sort
A chainable version of javascript's built in array sort.
```
.sort((a, b) => a > b)
```
##### By Boolean
Abstracted sort by matching a key to a boolean.
```javascript
.sortBy('isActiveUser')
```
##### By String
Sorts alphabetically based on key.
```javascript
.sortBy('name')
```
##### By Number
Sorts by ascending numerical order based on key.
```javascript
.sortBy('netWorth')
```
#### Pagination
Page 1 with 5 results per page.
```javascript
.paginate(1, 5)
```
Page 2 with default of 10 results per page.
```javascript
.paginate(2)
```
## Tests
`npm test` runs tests through Jest