dbd.db
Version:
A Lightweight Schema-Free Object-Oriented LocalDatabase for Development and Production Purpose
57 lines (40 loc) • 980 B
JavaScript
const isEqual = require('./isEqual')
const parseArray = require('./parseArray')
async function findOne(array, filter, keys) {
if (!keys) keys = Object.keys(filter)
let i = 0
let index = -1
find:
while (i < array.length) {
if (index > -1) break
let k = 0
while (k < keys.length) {
if (index > -1) break
if (Array.isArray(filter[keys[k]]) && Array.isArray(array[i][keys[k]])) {
const res = await parseArray(filter[keys[k]], array[i][keys[k]])
if (!res) {
i++
continue find
}
} else if (filter[keys[k]] instanceof Object && array[i][keys[k]] instanceof Object) {
const res = await isEqual(filter[keys[k]], Object.keys(filter[keys[k]]), array[i][keys[k]])
if (!res) {
i++
continue find
}
} else if (filter[keys[k]] !== array[i][keys[k]]) {
i++
continue find
}
k++
}
index = i
break
}
if (index < 0) return {}
return {
item: array[index],
index
}
}
module.exports = findOne