@lou.codes/iterables
Version:
🔁 Iterable and AsyncIterable utils
24 lines (23 loc) • 700 B
JavaScript
import { isIterable } from "@lou.codes/predicates";
import { createIterableIterator } from "./createIterableIterator.js";
/**
* Flattens one level of the given iterable.
*
* @category Generators
* @example
* ```typescript
* flat([1, 2, [3, 4]]); // [1, 2, 3, 4]
* ```
* @param iterable Iterable to flatten.
* @returns Iterable with flatten items.
*/
export const flat = iterable =>
createIterableIterator(function* () {
// eslint-disable-next-line functional/no-loop-statements
for (const iterableOrItem of iterable) {
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
isIterable(iterableOrItem) ?
yield* iterableOrItem
: yield iterableOrItem;
}
});