Class IterableCollection<TInput>

All methods that return ICollection are executed lazly which means they will be executed when the IterableCollection is iterated with forEach method or "for of" loop. The rest of the methods are executed eagerly.

Type Parameters

  • TInput

Implements

Constructors

Methods

  • The after method returns the item that comes after the first item that matches predicateFn. If the collection is empty or the predicateFn does not match or matches the last item then null is returned.

    Parameters

    Returns null | TInput

    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4]);
    collection.after(item => item === 2);
    // 3
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4]);
    collection.after(item => item === 4);
    // null
  • The afterOr method returns the item that comes after the first item that matches predicateFn. If the collection is empty or the predicateFn does not match or matches the last item then defaultValue is returned.

    Type Parameters

    Parameters

    Returns TInput | TExtended

    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4]);
    collection.afterOr(-1, item => item === 2);
    // 3
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4]);
    collection.afterOr(-1, item => item === 4);
    // -1
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4]);
    collection.afterOr(() => -1, item => item === 4);
    // -1
  • The before method returns the item that comes before the first item that matches predicateFn. If the predicateFn does not match or matches the first item then null is returned.

    Parameters

    Returns null | TInput

    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4]);
    collection.before(item => item === 2);
    // 1
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4]);
    collection.before(item => item === 1);
    // null
  • The beforeOr method returns the item that comes before the first item that matches predicateFn. If the collection is empty or the predicateFn does not match or matches the first item then defaultValue is returned.

    Type Parameters

    Parameters

    Returns TInput | TExtended

    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4]);
    collection.beforeOr(-1, item => item === 2);
    // 1
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4]);
    collection.beforeOr(-1, item => item === 1);
    // -1
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4]);
    collection.beforeOr(() => -1, item => item === 1);
    // -1
  • The beforeOrFail method returns the item that comes before the first item that matches predicateFn. If the collection is empty or the predicateFn does not match or matches the first item then an error is thrown.

    Parameters

    Returns TInput

    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4]);
    collection.beforeOrFail(item => item === 2);
    // 1
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4]);
    collection.beforeOrFail(item => item === 1);
    // error is thrown
  • The chunk method breaks the collection into multiple, smaller collections of size chunkSize. If chunkSize is not divisible with total number of items then the last chunk will contain the remaining items.

    Parameters

    • chunkSize: number

    Returns ICollection<ICollection<TInput>>

    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4, 5, 6, 7]);
    const chunks = collection.chunk(4);
    chunks.map(chunk => chunk.toArray()).toArray();
    // [[1, 2, 3, 4], [5, 6, 7]]
  • The chunkWhile method breaks the collection into multiple, smaller collections based on the evaluation of predicateFn. The chunk variable passed to the predicateFn may be used to inspect the previous item.

    Parameters

    Returns ICollection<ICollection<TInput>>

    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection("AABBCCCD");
    const chunks = collection.chunkWhile((value, index, chunk) => {
    return value === chunk.last();
    });
    chunks.map(chunk => chunk.toArray()).toArray();
    // [["A", "A"], ["B", "B"], ["C", "C", "C"], ["D"]]
  • The countBy method counts the occurrences of values in the collection by selectFn . By default the equality check occurs on the item.

    Type Parameters

    Parameters

    Returns ICollection<RecordItem<TOutput, number>>

    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection(["a", "a", "a", "b", "b", "c"]);
    const count = collection
    .countBy()
    .map(([key, collection]) => [key, collection.toArray()])
    .toArray();
    // [
    // ["a", 3],
    // ["b", 2],
    // ["c", 1]
    // ]
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection(["alice@gmail.com", "bob@yahoo.com", "carlos@gmail.com"]);
    const count = collection
    .countBy(item => item.split("@")[1])
    .toArray();
    // [
    // ["gmail.com", 2],
    // ["yahoo.com", 1]
    // ]
  • The crossJoin method cross joins the collection's values among iterables, returning a Cartesian product with all possible permutations.

    Type Parameters

    • TExtended

    Parameters

    Returns ICollection<CrossJoinResult<TInput, TExtended>>

    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2]);
    const matrix = collection.cross(["a", "b"]);
    matrix.toArray();
    // [
    // [1, "a"],
    // [1, "b"],
    // [2, "a"],
    // [2, "b"],
    // ]
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2]);
    const matrix = collection.cross(["a", "b"]).cross(["I", "II"]);
    matrix.toArray();
    // [
    // [1, "a", "I"],
    // [1, "a", "II"],
    // [1, "b", "I"],
    // [1, "b", "II"],
    // [2, "a", "I"],
    // [2, "a", "II"],
    // [2, "b", "I"],
    // [2, "b", "II"],
    // ]
  • The difference method will return the values in the original collection that are not present in iterable. By default the equality check occurs on the item.

    Type Parameters

    Parameters

    Returns ICollection<TInput>

    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 2, 3, 4, 5]);
    const difference = collection.difference([2, 4, 6, 8]);
    difference.toArray();
    // [1, 3, 5]
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([
    { name: "iPhone 6", brand: "Apple", type: "phone" },
    { name: "iPhone 5", brand: "Apple", type: "phone" },
    { name: "Apple Watch", brand: "Apple", type: "watch" },
    { name: "Galaxy S6", brand: "Samsung", type: "phone" },
    { name: "Galaxy Gear", brand: "Samsung", type: "watch" },
    ]);
    const difference = collection.difference(
    [
    { name: "Apple Watch", brand: "Apple", type: "watch" },
    ],
    (product) => product.type
    );
    difference.toArray();
    // [
    // { name: "iPhone 6", brand: "Apple", type: "phone" },
    // { name: "iPhone 5", brand: "Apple", type: "phone" },
    // { name: "Galaxy S6", brand: "Samsung", type: "phone" },
    // ]
  • The first method returns the first item in the collection that passes predicateFn . By default it will get the first item. If the collection is empty or no items passes predicateFn than null i returned.

    Type Parameters

    • TOutput

    Parameters

    Returns null | TOutput

    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4]);
    collection.first();
    // 1
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4]);
    collection.first(item => item > 2);
    // 3
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4]);
    collection.first(item => item > 10);
    // null
  • The firstOr method returns the first item in the collection that passes predicateFn By default it will get the first item. If the collection is empty or no items passes predicateFn than defaultValue .

    Type Parameters

    Parameters

    Returns TOutput | TExtended

    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4]);
    collection.firstOr(-1);
    // 1
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4]);
    collection.firstOr(-1, item => item > 2);
    // 3
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4]);
    collection.firstOr(-1, item => item > 10);
    // -1
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4]);
    collection.firstOr(() => -1, item => item > 10);
    // -1
  • The firstOrFail method returns the first item in the collection that passes predicateFn . By default it will get the first item. If the collection is empty or no items passes predicateFn than error is thrown.

    Type Parameters

    • TOutput

    Parameters

    Returns TOutput

    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4]);
    collection.firstOrFail();
    // 1
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4]);
    collection.firstOrFail(item => item > 2);
    // 3
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4]);
    collection.firstOrFail(item => item > 10);
    // throws an error
  • The flatMap method returns a new array formed by applying mapFn to each item of the array, and then collapses the result by one level. It is identical to a map method followed by a collapse method.

    Type Parameters

    • TOutput

    Parameters

    Returns ICollection<TOutput>

    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([["a", "b"], ["c", "d"]]).flatMap(item => [item.length, ...item]);
    collection.toArray();
    // [2, "a", "b", 2, "c", "d"]
  • The groupBy method groups the collection's items by selectFn . By default the equality check occurs on the item.

    Type Parameters

    Parameters

    Returns ICollection<RecordItem<TOutput, ICollection<TInput>>>

    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection(["a", "a", "a", "b", "b", "c"]);
    const group = collection
    .groupBy()
    .map(([key, collection]) => [key, collection.toArray()])
    .toArray();
    // [
    // [
    // "a",
    // ["a", "a", "a"]
    // ],
    // [
    // "b",
    // ["b", "b"]
    // ],
    // [
    // "c",
    // ["c"]
    // ]
    // ]
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection(["alice@gmail.com", "bob@yahoo.com", "carlos@gmail.com"]);
    const group = collection
    .groupBy(item => item.split("@")[1])
    .map(([key, collection]) => [key, collection.toArray()])
    .toArray();
    // [
    // [
    // "gmail.com",
    // ["alice@gmail.com", "carlos@gmail.com"]
    // ],
    // [
    // "yahoo.com",
    // ["bob@yahoo.com"]
    // ]
    // ]
  • The join method joins the collection's items with separator . An error will be thrown when if a none string item is encounterd.

    Parameters

    • separator: string = ","

    Returns EnsureType<TInput, string>

    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4]);
    collection.map(item => item.toString()).join();
    // "1,2,3,4"
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4]);
    collection.map(item => item.toString()).join("_");
    // "1_2_3_4"
  • The last method returns the last item in the collection that passes predicateFn . By default it will get the last item. If the collection is empty or no items passes predicateFn than null i returned.

    Type Parameters

    • TOutput

    Parameters

    Returns null | TOutput

    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4]);
    collection.last();
    // 4
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4]);
    collection.last(item => item < 4);
    // 3
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4]);
    collection.last(item => item > 10);
    // null
  • The lastOr method returns the last item in the collection that passes predicateFn . By default it will get the last item. If the collection is empty or no items passes predicateFn than defaultValue .

    Type Parameters

    Parameters

    Returns TOutput | TExtended

    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4]);
    collection.lastOr(-1);
    // 4
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4]);
    collection.lastOr(-1, item => item < 4);
    // 3
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4]);
    collection.lastOr(-1, item => item > 10);
    // -1
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4]);
    collection.lastOr(() => -1, item => item > 10);
    // -1
  • The lastOrFail method returns the last item in the collection that passes predicateFn . By default it will get the last item. If the collection is empty or no items passes predicateFn than error is thrown.

    Type Parameters

    • TOutput

    Parameters

    Returns TOutput

    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4]);
    collection.lastOrFail();
    // 4
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4]);
    collection.lastOrFail(item => item < 4);
    // 3
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4]);
    collection.lastOrFail(item => item > 10);
    // throws an error
  • The padEnd method pads this collection with fillItems until the resulting collection size reaches maxLength. The padding is applied from the end of this collection.

    Type Parameters

    Parameters

    • maxLength: number
    • fillItems: Iterable<TExtended, any, any>

    Returns ICollection<TInput | TExtended>

    import { ListCollection } from "@daiso-tech/core";;

    new ListCollection("abc").padEnd(10, "foo").join("");
    // "abcfoofoof"

    new ListCollection("abc").padEnd(6, "123465").join("");
    // "abc123"

    new ListCollection("abc").padEnd(8, "0").join("");
    // "abc00000"

    new ListCollection("abc").padEnd(1, "_").join("");
    // "abc"
  • The padStart method pads this collection with fillItems until the resulting collection size reaches maxLength. The padding is applied from the start of this collection.

    Type Parameters

    Parameters

    • maxLength: number
    • fillItems: Iterable<TExtended, any, any>

    Returns ICollection<TInput | TExtended>

    import { ListCollection } from "@daiso-tech/core";;

    new ListCollection("abc").padStart(10, "foo").join("");
    // "foofoofabc"

    new ListCollection("abc").padStart(6, "123465").join("");
    // "123abc"

    new ListCollection("abc").padStart(8, "0").join("");
    // "00000abc"

    new ListCollection("abc").padStart(1, "_").join("");
    // "abc"
  • The page method returns a new collection containing the items that would be present on page with custom pageSize .

    Parameters

    • page: number
    • pageSize: number

    Returns ICollection<TInput>

    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4, 5, 6, 7, 8, 9]);
    const page = collection.page(2, 3);
    page.toArray();
    // [4, 5, 6]
  • The pipe method passes the orignal collection to callback and returns the result from callback. This method is useful when you want compose multiple smaller functions.

    Type Parameters

    Parameters

    Returns TOutput

    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, "2", "a", 1, 3, {}]);
    function toNbrs<TInput>(
    collection: ICollection<TInput>,
    ): ICollection<number> {
    return collection
    .map((item) => Number(item))
    .reject((nbr) => Number.isNaN(nbr));
    }
    function nbrToStr(collection: ICollection<number>): number[] {
    return collection.repeat(2).toArray();
    }
    const piped = collection.pipe(toNbrs).pipe(nbrToStr);
    console.log(piped);
    // [ 1, 2, 1, 3 ]
  • The reverse method will reverse the order of the collection. The reversing of the collection will be applied in chunks that are the size of chunkSize .

    Parameters

    • chunkSize: number = IterableCollection.DEFAULT_CHUNK_SIZE

    Returns ICollection<TInput>

    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([-1, 2, 4, 3]);
    collection.reverse().toArray();
    // [3, 4, 2, -1]
  • The slice method creates porition of the original collection selected from start and end where start and end (end not included) represent the index of items in the collection.

    Parameters

    • Optionalstart: number
    • Optionalend: number

    Returns ICollection<TInput>

    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection(["a", "b", "c", "d", "e", "f"]);
    collection.slice(3).toArray();
    // ["d", "e", "f"]
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection(["a", "b", "c", "d", "e", "f"]);
    collection.slice(undefined, 2).toArray();
    // ["a", "b"]
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection(["a", "b", "c", "d", "e", "f"]);
    collection.slice(2, 5).toArray();
    // ["c", "d", "e"]
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection(["a", "b", "c", "d", "e", "f"]);
    collection.slice(-2).toArray();
    // ["e", "f"]
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection(["a", "b", "c", "d", "e", "f"]);
    collection.slice(undefined, -2).toArray();
    // ["a", "b", "c", "d"]
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection(["a", "b", "c", "d", "e", "f"]);
    collection.slice(-4, -2).toArray();
    // ["c", "d"]
  • The sliding method returns a new collection of chunks representing a "sliding window" view of the items in the collection.

    Parameters

    • chunkSize: number
    • step: number = ...

    Returns ICollection<ICollection<TInput>>

    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4, 5])
    const chunks = collection.sliding(2);
    chunks.map(chunk => chunk.toArray()).toArray();
    // [[1, 2], [2, 3], [3, 4], [4, 5]]
  • The sort method sorts the collection. You can provide a comparator function.

    Parameters

    Returns ICollection<TInput>

    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([-1, 2, 4, 3]);
    collection.sort().toArray();
    // [-1, 2, 3, 4]
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([
    { name: "Anders", age: 30 },
    { name: "Joe", age: 20 },
    { name: "Hasan", age: 25 },
    { name: "Linda", age: 19 }
    ]);
    collection.sort(({ age: ageA }, { age: ageB }) => ageA - ageB).toArray();
    // [
    // { name: "Linda", age: 19 }
    // { name: "Joe", age: 20 },
    // { name: "Hasan", age: 25 },
    // { name: "Anders", age: 30 },
    // ]
  • The split method breaks a collection evenly into chunkAmount of chunks.

    Parameters

    • chunkAmount: number

    Returns ICollection<ICollection<TInput>>

    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4, 5]);
    const chunks = collection.split(3);
    chunks.map(chunk => chunk.toArray()).toArray();
    // [[1, 2], [3, 4], [5]]
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4, 5, 6]);
    const chunks = collection.split(3);
    chunks.map(chunk => chunk.toArray()).toArray();
    // [[1, 2], [3, 4], [5, 6]]
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4, 5, 6, 7]);
    const chunks = collection.split(3);
    chunks.map(chunk => chunk.toArray()).toArray();
    // [[1, 2, 7], [3, 4], [5, 6]]
  • The take method takes the first limit items.

    Parameters

    • limit: number

    Returns ICollection<TInput>

    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([0, 1, 2, 3, 4, 5]);
    const chunk = collection.take(3);
    chunk.toArray();
    // [0, 1, 2]
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([0, 1, 2, 3, 4, 5]);
    const chunk = collection.take(-2);
    chunk.toArray();
    // [0, 1, 2, 3]
  • The tap method passes a copy of the original collection to callback, allowing you to do something with the items while not affecting the original collection.

    Parameters

    Returns ICollection<TInput>

    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 2, 3, 4, 5, 6])
    .tap(collection => {
    collection
    .filter(value => value % 2 === 0)
    .forEach(value => console.log(value))
    })
    .toArray();
    // [1, 2, 3, 4, 5, 6]
  • The unique method removes all duplicate values from the collection by selectFn . By default the equality check occurs on the item.

    Type Parameters

    • TOutput

    Parameters

    Returns ICollection<TInput>

    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([1, 1, 2, 2, 3, 4, 2]);
    collection.unique().toArray();
    // [1, 2, 3, 4]
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection([
    { name: "iPhone 6", brand: "Apple", type: "phone" },
    { name: "iPhone 5", brand: "Apple", type: "phone" },
    { name: "Apple Watch", brand: "Apple", type: "watch" },
    { name: "Galaxy S6", brand: "Samsung", type: "phone" },
    { name: "Galaxy Gear", brand: "Samsung", type: "watch" },
    ]);
    const unique = collection.unique({
    selectFn: item => item.brand
    }).toArray();
    // [
    // { name: "iPhone 6", brand: "Apple", type: "phone" },
    // { name: "Galaxy S6", brand: "Samsung", type: "phone" },
    // ]
  • The zip method merges together the values of iterable with the values of the collection at their corresponding index. The returned collection has size of the shortest collection.

    Type Parameters

    • TExtended

    Parameters

    Returns ICollection<RecordItem<TInput, TExtended>>

    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection(["Chair", "Desk"]);
    const zipped = collection.zip([100, 200]);
    zipped.toArray();
    // [["Chair", 100], ["Desk", 200]]
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection(["Chair", "Desk", "Couch"]);
    const zipped = collection.zip([100, 200]);
    zipped.toArray();
    // [["Chair", 100], ["Desk", 200]]
    import { ListCollection } from "@daiso-tech/core";;

    const collection = new ListCollection(["Chair", "Desk"]);
    const zipped = collection.zip([100, 200, 300]);
    zipped.toArray();
    // [["Chair", 100], ["Desk", 200]]