shelving
Version:
Toolkit for using data in JavaScript.
20 lines (19 loc) • 696 B
JavaScript
/** Filter an iterable set of items using a matcher. */
export function* filterItems(items, match, ...args) {
for (const item of items)
if (match(item, ...args))
yield item;
}
/** Filter an array (immutably) using a matcher. */
export function filterArray(input, match, ...args) {
if (!input.length)
return input;
const output = Array.from(filterItems(input, match, ...args));
return output.length === input.length ? input : output;
}
/** Filter a sequence of values using a matcher. */
export async function* filterSequence(sequence, match, ...args) {
for await (const item of sequence)
if (match(item, ...args))
yield item;
}