Skip to content

Instantly share code, notes, and snippets.

@cedrickvstheworld
Last active December 10, 2019 02:02
Show Gist options
  • Save cedrickvstheworld/31b62c47aced15f0eb3db4eff8c03339 to your computer and use it in GitHub Desktop.
Save cedrickvstheworld/31b62c47aced15f0eb3db4eff8c03339 to your computer and use it in GitHub Desktop.
dataFilter.js
/**
* order, orderBy, search by text, and set offset / limit for array of objects (depth = 1)
*/
const sample = [
{
name: "cDudeson",
age: 32
},
{
name: "aDeedee",
age: 32
},
{
name: "bJed",
age: 21
}
]
const dataFilter = (data, searchText, orderBy, order, offset=0, limit=0, searchFields=[]) => {
return new Promise((resolve, reject) => {
if (!Array.isArray(data)) {
return reject('data must be an array')
}
// filter by searchText
let filtered = data.filter((elem) => {
const match = new RegExp(searchText, 'i')
let keys = searchFields.length !== 0 ? searchFields : Object.keys(elem)
for (let ii in keys) {
if (match.test(elem[keys[ii]])) {
return elem
}
}
})
const dataLength = filtered.length
let ordered = filtered.sort(sortCompareObject(orderBy, order))
let result = ordered
if (limit && !offset) {
result = ordered.splice(0, limit)
}
else if (!limit && offset) {
result = ordered.splice(offset)
}
else if (limit && offset) {
result = ordered.splice(offset, limit)
}
resolve({
data: result,
totalPages: !limit ? (!dataLength ? 0 : 1) : Math.ceil(dataLength / limit),
totalCounts: dataLength
})
})
}
const sortCompareObject = (key, order = 'ASC') => {
return function compare(l, r) {
if (!l.hasOwnProperty(key) || !r.hasOwnProperty(key)) {
return 0
}
const lVal = typeof l[key] === 'string' ? l[key].toUpperCase() : l[key]
const rVal = typeof r[key] === 'string' ? r[key].toUpperCase() : r[key]
let evaluator = 0
if (lVal > rVal) {
evaluator = 1
}
else if (lVal < rVal) {
evaluator = -1
}
return order === 'DESC' ? evaluator * -1 : evaluator
}
}
dataFilter(sample, '', 'name', 'ASC', 0, 5)
.then((data) => {
console.log(data)
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment