dbd.db
Version:
A Lightweight Schema-Free Object-Oriented LocalDatabase for Development and Production Purpose
48 lines (34 loc) • 932 B
JavaScript
const clonedeep = require('rfdc')()
const isEqual = require('./isEqual')
const parseArray = require('./parseArray')
async function findData(array, filter, max, json) {
const keys = Object.keys(filter)
const filtered = []
let i = 0
filter:
while (i < array.length) {
if (i > max) break
for (const key of keys) {
if (Array.isArray(filter[key]) && Array.isArray(array[i][key])) {
const res = await parseArray(filter[key], array[i][key])
if (!res) {
i++
continue filter
}
} else if (filter[key] instanceof Object && array[i][key] instanceof Object) {
const res = isEqual(filter[key], Object.keys(filter[key], array[i][key]))
if (!res) {
i++
continue filter
}
} else if (filter[key] !== array[i][key]) {
i++
continue filter
}
}
filtered.push(array[i])
i++
}
return filtered.length ? clonedeep(filtered) : []
}
module.exports = findData