@technobuddha/library
Version:
A large library of useful functions
41 lines • 2.14 kB
JavaScript
import { isFunction } from "./is-function.js";
import { isPrimitive } from "./is-primitive.js";
/**
* Collapses an array of values into a flat array with `null` and `undefined` elements removed.
*
* Each argument can be:
* - `T`
* - `null`
* - `undefined`
* - a function returning `T` or `null` or `undefined` or an array
* - An iterable returning `T` or `null` or `undefined`
*
* The function flattens all arguments, filters out `null`, and `undefined` values,
* and returns the resulting array.
* @typeParam T - The primitive type that can be collapsed.
* @param args - The values to collapse, which may be `T`, generators, iterables, or functions.
* @returns An array of `T`, with all `null`, and `undefined` values removed.
* @example
* ```typescript
* collapse(
* "hello",
* ["world", null, "foo"],
* function* () { yield "bar"; yield undefined; yield ["baz"]; },
* () => "qux",
* null,
* undefined
* );
* // Returns: ["hello", "world", "foo", "bar", "baz", "qux"]
* ```
* @group Array
* @category Operations
*/
export function collapse(...args) {
return args
.flatMap((arg) => {
const a = isFunction(arg) ? arg() : arg;
return isPrimitive(a) ? a : Array.from(a);
})
.filter((a) => a != null);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGFwc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29sbGFwc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQWdEaEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkJHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBMEMsR0FBRyxJQUFzQjtJQUN6RixPQUFPLElBQUk7U0FDUixPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUNmLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUV4QyxPQUFPLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVDLENBQUMsQ0FBQztTQUNELE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBVSxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQ3RDLENBQUMifQ==