@future-widget-lab/record-set
Version:
A dedicated data structure for in-memory record collections, offering fluent, immutable APIs for MongoDB-like querying, sorting, and transformation.
34 lines (26 loc) • 670 B
text/typescript
import sift from 'sift';
import type { Query } from 'sift';
type RemoveOneOptions<TRecord> = {
query: Query<TRecord>;
records: Array<TRecord>;
};
/**
* @description
* Use this helper to remove the first record from the record set that matches the given query.
*/
export const removeOne = <TRecord>(
options: RemoveOneOptions<TRecord>
): Array<TRecord> => {
const { query, records } = options;
const match = sift(query);
const filtered: Array<TRecord> = [];
let removed = false;
for (const record of records) {
if (!removed && match(record)) {
removed = true;
continue;
}
filtered.push(record);
}
return filtered;
};