{"id":23789966,"url":"https://github.com/blackglory/iterable-operator","last_synced_at":"2025-06-21T04:43:09.385Z","repository":{"id":44965068,"uuid":"209497381","full_name":"BlackGlory/iterable-operator","owner":"BlackGlory","description":"🌳 Utilities for JavaScript Iterable and AsyncIterable","archived":false,"fork":false,"pushed_at":"2024-04-20T07:01:03.000Z","size":3409,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-05-25T09:06:30.475Z","etag":null,"topics":["browser","esm","library","nodejs","npm-package","typescript"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/iterable-operator","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BlackGlory.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-09-19T08:05:33.000Z","updated_at":"2024-04-20T07:01:10.000Z","dependencies_parsed_at":"2024-06-19T01:54:33.586Z","dependency_job_id":"efd9f46a-e057-42f5-813b-228cd641aa52","html_url":"https://github.com/BlackGlory/iterable-operator","commit_stats":{"total_commits":246,"total_committers":2,"mean_commits":123.0,"dds":0.06910569105691056,"last_synced_commit":"9e75ca6a52870aee98c47fc1b28e4f150e4aea24"},"previous_names":[],"tags_count":77,"template":false,"template_full_name":null,"purl":"pkg:github/BlackGlory/iterable-operator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BlackGlory%2Fiterable-operator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BlackGlory%2Fiterable-operator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BlackGlory%2Fiterable-operator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BlackGlory%2Fiterable-operator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BlackGlory","download_url":"https://codeload.github.com/BlackGlory/iterable-operator/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BlackGlory%2Fiterable-operator/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261064629,"owners_count":23104729,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["browser","esm","library","nodejs","npm-package","typescript"],"created_at":"2025-01-01T17:17:50.185Z","updated_at":"2025-06-21T04:43:04.372Z","avatar_url":"https://github.com/BlackGlory.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# iterable-operator\nUtilities for JavaScript `Iterable` and `AsyncIterable`.\n\n## Install\n```sh\nnpm install --save iterable-operator\n# or\nyarn add iterable-operator\n```\n\n## Usage\n```ts\nimport { map, toArray } from 'iterable-operator'\n\nconst iter = [1, 2, 3]\nconst doubleIter = map(iter, x =\u003e x * 2)\nconst result = toArray(doubleIter)\n```\n\nYou may need [a pipe function].\n\n[a pipe function]: https://github.com/BlackGlory/extra-utils\n\n## API\n### isIterable\n```ts\nfunction isIterable\u003cT\u003e(val: unknown): val is Iterable\u003cT\u003e\nfunction isntIterable\u003cT\u003e(val: T): val is Exclude\u003cT, Iterable\u003cunknown\u003e\u003e\n```\n\n### isAsyncIterable\n```ts\nfunction isAsyncIterable\u003cT\u003e(val: unknown): val is AsyncIterable\u003cT\u003e\nfunction isntAsyncIterable\u003cT\u003e(\n  val: T\n): val is Exclude\u003cT, AsyncIterable\u003cunknown\u003e\u003e\n```\n\n### chunk, chunkAsync\n```ts\nfunction chunk\u003cT\u003e(\n  iterable: Iterable\u003cT\u003e\n, size: number // size \u003e 0\n): IterableIterator\u003cT[]\u003e\nfunction chunkAsync\u003cT\u003e(\n  iterable: AsyncIterable\u003cT\u003e\n, size: number // size \u003e 0\n): AsyncIterableIterator\u003cArray\u003cAwaited\u003cT\u003e\u003e\u003e\n```\n\n```ts\nchunk([1, 2, 3], 2) // [[1, 2], [3]]\nchunk([1, 2, 3], 3) // [[1, 2, 3]]\nchunk([1, 2, 3], 5) // [[1, 2, 3]]\nchunk([1, 2, 3], 0) // throw Error\nchunk([1, 2, 3], -1) // throw Error\n```\n\nThe memory usage of this function depends on `size`.\n\n### chunkBy, chunkByAsync\n```ts\nfunction chunkBy\u003cT\u003e(\n  iterable: Iterable\u003cT\u003e\n, predicate: (element: T, index: number) =\u003e unknown\n): IterableIterator\u003cT[]\u003e\nfunction chunkByAsync\u003cT\u003e(\n  iterable: Iterable\u003cT\u003e | AsyncIterable\u003cT\u003e\n, predicate: (element: Awaited\u003cT\u003e, index: number) =\u003e Awaitable\u003cunknown\u003e\n): AsyncIterableIterator\u003cArray\u003cAwaited\u003cT\u003e\u003e\u003e\n```\n\n```ts\nchunkBy([1, 2, 3], x =\u003e x === 2) // [[1, 2], [3]]\nchunkBy([1, 2, 3], x =\u003e x === 3) // [[1, 2, 3]]\nchunkBy([1, 2, 3], x =\u003e x === 5) // [[1, 2, 3]]\n```\n\nThe memory usage of this function depends on `iterable` and `predicate`.\n\n### concat, concatAsync\n```ts\nfunction concat\u003cT, U\u003e(\n  iterable: Iterable\u003cT\u003e\n, ...otherIterables: Iterable\u003cU\u003e[]\n): IterableIterator\u003cT | U\u003e\nfunction concatAsync\u003cT, U\u003e(\n  iterable: Iterable\u003cT\u003e | AsyncIterable\u003cT\u003e\n, ...otherIterables: Array\u003cIterable\u003cAwaitable\u003cU\u003e\u003e | AsyncIterable\u003cAwaitable\u003cU\u003e\u003e\u003e\n): AsyncIterableIterator\u003cAwaited\u003cT\u003e | Awaited\u003cU\u003e\u003e\n```\n\n```ts\nconcat([1, 2, 3]) // [1, 2, 3]\nconcat([1, 2, 3], ['a', 'b', 'c']) // [1, 2, 3, 'a', 'b', 'c']\n```\n\n### difference, differenceAsync\n```ts\nfunction difference\u003cT\u003e(left: Iterable\u003cT\u003e, right: Iterable\u003cT\u003e): IterableIterator\u003cT\u003e\nfunction differenceAsync\u003cT\u003e(\n  left: Iterable\u003cAwaitable\u003cT\u003e\u003e | AsyncIterable\u003cAwaitable\u003cT\u003e\u003e\n, right: Iterable\u003cAwaitable\u003cT\u003e\u003e | AsyncIterable\u003cAwaitable\u003cT\u003e\u003e\n): AsyncIterableIterator\u003cAwaited\u003cT\u003e\u003e\n```\n\n```ts\ndifference([1, 2, 3], [3, 4, 5]) // [1, 2]\n```\n\nThe memory usage of this function depends on `right`.\n\n### drop, dropAsync\n```ts\nfunction drop\u003cT\u003e(\n  iterable: Iterable\u003cT\u003e\n, count: number // count \u003e= 0\n): IterableIterator\u003cT\u003e\nfunction dropAsync\u003cT\u003e(\n  iterable: AsyncIterable\u003cT\u003e\n, count: number // count \u003e= 0\n): AsyncIterableIterator\u003cAwaited\u003cT\u003e\u003e\n```\n\n```ts\ndrop([1, 2, 3], 0) // [1, 2, 3]\ndrop([1, 2, 3], 2) // [3]\ndrop([1, 2, 3], 3) // []\ndrop([1, 2, 3], 5) // []\ndrop([1, 2, 3], -1) // throw Error\n```\n\n### dropRight, dropRightAsync\n```ts\nfunction dropRight\u003cT\u003e(\n  iterable: Iterable\u003cT\u003e\n, count: number // count \u003e= 0\n): IterableIterator\u003cT\u003e\nfunction dropRightAsync\u003cT\u003e(\n  iterable: AsyncIterable\u003cT\u003e\n, count: number // count \u003e= 0\n): AsyncIterableIterator\u003cAwaited\u003cT\u003e\u003e\n```\n\n```ts\ndropRight([1, 2, 3], 0) // [1, 2, 3]\ndropRight([1, 2, 3], 2) // [1]\ndropRight([1, 2, 3], 3) // []\ndropRight([1, 2, 3], 5) // []\ndropRight([1, 2, 3], -1) // throw Error\n```\n\nThe memory usage of this function depends on `iterable`.\n\n### dropUntil, dropUntilAsync\n```ts\nfunction dropUntil\u003cT\u003e(\n  iterable: Iterable\u003cT\u003e\n, predicate: (element: T, index: number) =\u003e unknown\n): IterableIterator\u003cT\u003e\nfunction dropUntilAsync\u003cT\u003e(\n  iterable: Iterable\u003cT\u003e | AsyncIterable\u003cT\u003e\n, predicate: (element: Awaited\u003cT\u003e, index: number) =\u003e Awaitable\u003cunknown\u003e\n): AsyncIterableIterator\u003cAwaited\u003cT\u003e\u003e\n```\n\n```ts\ndropUntil([1, 2, 3], x =\u003e x === 2) // [2, 3]\n```\n\nThe memory usage of this function depends on `iterable` and `predicate`.\n\n### filter, filterAsync\n```ts\nfunction filter\u003cT, U extends T = T\u003e(\n  iterable: Iterable\u003cT\u003e\n, predicate: (element: T, index: number) =\u003e unknown\n): IterableIterator\u003cU\u003e\nfunction filterAsync\u003cT, U extends Awaited\u003cT\u003e = Awaited\u003cT\u003e\u003e(\n  iterable: Iterable\u003cT\u003e | AsyncIterable\u003cT\u003e\n, predicate: (element: Awaited\u003cT\u003e, index: number) =\u003e Awaitable\u003cunknown\u003e\n): AsyncIterableIterator\u003cU\u003e\n```\n\n```ts\nfilter([1, 2, 3], x =\u003e x % 2 === 1) // [1, 3]\n```\n\n### flatten, flattenAsync\n```ts\nfunction flatten\u003cT\u003e(iterable: Iterable\u003cunknown\u003e): IterableIterator\u003cT\u003e\nfunction flattenAsync\u003cT\u003e(iterable: AsyncIterable\u003cunknown\u003e): AsyncIterableIterator\u003cT\u003e\n```\n\n```ts\nflatten([]) // []\nflatten('123') // ['1', '2', '3']\nflatten(['one', ['two'], 0, [1, [2]]]) // ['o', 'n', 'e', 'two', 0, 1, [2]]\n```\n\n### flattenDeep, flattenDeepAsync\n```ts\nfunction flattenDeep\u003cT\u003e(\n  iterable: Iterable\u003cunknown\u003e\n, depth: number = Infinity // depth \u003e= 0\n): IterableIterator\u003cT\u003e\nfunction flattenDeepAsync\u003cT\u003e(\n  iterable: AsyncIterable\u003cunknown\u003e\n, depth: number = Infinity // depth \u003e= 0\n): AsyncIterableIterator\u003cT\u003e\n```\n\n```ts\nflattenDeep([]) // []\nflattenDeep('123') // ['1', '2', '3']\nflattenDeep([], -1) // throw Error\nflattenDeep([0, [1]], 0) // [0, [1]]\nflattenDeep(['one', ['two', ['three']], 0, [1, [2, [3]]]], 2) // ['o', 'n', 'e', 't', 'w', 'o', 'three', 0, 1, 2, [3]]\n```\n\n### flattenBy, flattenByAsync\n```ts\nfunction flattenBy\u003cT\u003e(\n  iterable: Iterable\u003cunknown\u003e\n, predicate: (element: unknown, level: number) =\u003e boolean\n): IterableIterator\u003cT\u003e\nfunction flattenByAsync\u003cT\u003e(\n  iterable: Iterable\u003cunknown\u003e | AsyncIterable\u003cunknown\u003e\n, predicate: (element: unknown, level: number) =\u003e Awaitable\u003cunknown\u003e\n): AsyncIterableIterator\u003cT\u003e\n```\n\n```ts\nflattenBy(['one', ['two'], 0, [1]], x =\u003e typeof x !== 'string') // ['one', 'two', 0, 1]\nflattenBy([], () =\u003e true) // []\nflattenBy('123', () =\u003e true) // ['1', '2', '3']\n```\n\n### intersection, intersectionAsync\n```ts\nfunction intersection\u003cT\u003e(left: Iterable\u003cT\u003e, right: Iterable\u003cT\u003e): IterableIterator\u003cT\u003e\nfunction intersectionAsync\u003cT\u003e(\n  left: Iterable\u003cAwaitable\u003cT\u003e\u003e | AsyncIterable\u003cT\u003e\n, right: Iterable\u003cAwaitable\u003cT\u003e\u003e | AsyncIterable\u003cT\u003e\n): AsyncIterableIterator\u003cAwaited\u003cT\u003e\u003e\n```\n\nThe memory usage of this function depends on `right`.\n\n```ts\nintersection([1, 2], [2, 3]) // [2]\n```\n\n### map, mapAsync\n```ts\nfunction map\u003cT, U\u003e(\n  iterable: Iterable\u003cT\u003e\n, fn: (element: T, index: number) =\u003e U\n): IterableIterator\u003cU\u003e\nfunction mapAsync\u003cT, U\u003e(\n  iterable: Iterable\u003cT\u003e | AsyncIterable\u003cT\u003e\n, fn: (element: Awaited\u003cT\u003e, index: number) =\u003e Awaitable\u003cU\u003e\n): AsyncIterableIterator\u003cAwaited\u003cU\u003e\u003e\n```\n\n```ts\nmap([1, 2, 3], x =\u003e x * 2) // [2, 4, 6]\n```\n\n### flatMap, flatMapAsync\n```ts\nfunction flatMap\u003cT, U\u003e(\n  iterable: Iterable\u003cT\u003e\n, fn: (element: T, index: number) =\u003e Iterable\u003cU\u003e\n): IterableIterator\u003cU\u003e\nfunction flatMapAsync\u003cT, U\u003e(\n  iterable: Iterable\u003cT\u003e | AsyncIterable\u003cT\u003e\n, fn: (element: Awaited\u003cT\u003e, index: number) =\u003e Awaitable\u003cIterable\u003cU\u003e | AsyncIterable\u003cU\u003e\u003e\n): AsyncIterableIterator\u003cAwaited\u003cU\u003e\u003e\n```\n\n```ts\nmap([1, 2, 3], x =\u003e [x, x * 2]) // [1, 2, 2, 4, 3, 6]\n```\n\n### repeat, repeatAsync\n```ts\nfunction repeat\u003cT\u003e(\n  iterable: Iterable\u003cT\u003e\n, times: number // times \u003e= 0\n): IterableIterator\u003cT\u003e\nfunction repeatAsync\u003cT\u003e(\n  iterable: AsyncIterable\u003cT\u003e\n, times: number // times \u003e= 0\n): AsyncIterableIterator\u003cAwaited\u003cT\u003e\u003e\n```\n\n```ts\nrepeat([1, 2, 3], 2) // [1, 2, 3, 1, 2, 3]\nrepeat([1, 2, 3], 0) // []\nrepeat([1, 2, 3], -1) // throw Error\n```\n\nThe memory usage of this function depends on `iterable`.\n\n### slice, sliceAsync\n```ts\nfunction slice\u003cT\u003e(\n  iterable: Iterable\u003cT\u003e\n, start: number // start \u003e= 0\n, end: number = Infinity // end \u003e= start\n): IterableIterator\u003cT\u003e\nfunction sliceAsync\u003cT\u003e(\n  iterable: AsyncIterable\u003cT\u003e\n, start: number // start \u003e= 0\n, end: number = Infinity // end \u003e= start\n): AsyncIterableIterator\u003cAwaited\u003cT\u003e\u003e\n```\n\n```ts\nslice([1, 2, 3], -1, 1) // throw Error\nslice([1, 2, 3], 3, 5) // []\nslice([1, 2, 3], 1, 2) // [2]\nslice([1, 2, 3], 1, 1) // []\nslice([1, 2, 3], 2, 1) // throw Error\n```\n\n### join, joinAsync\n```ts\nfunction join\u003cT, U = T\u003e(iterable: Iterable\u003cT\u003e, separator: U): IterableIterator\u003cT | U\u003e\nfunction joinAsync\u003cT, U = T\u003e(\n  iterable: AsyncIterable\u003cT\u003e\n, separator: U\n): AsyncIterableIterator\u003cAwaited\u003cT\u003e | U\u003e\n```\n\n```ts\njoin([1, 2, 3], '+') // [1, '+', 2, '+', 3]\n```\n\n### split, splitAsync\n```ts\nfunction split\u003cT\u003e(iterable: Iterable\u003cT\u003e, separator: T): IterableIterator\u003cT[]\u003e\nfunction splitAsync\u003cT\u003e(\n  iterable: AsyncIterable\u003cT\u003e\n, separator: T\n): AsyncIterableIterator\u003cArray\u003cAwaited\u003cT\u003e\u003e\u003e\n```\n\n```ts\nsplit([1, 2, 3, 4, 5], 3) // [[1, 2], [4, 5]]\nsplit([1, 2, 3, 4, 5], 1) // [[], [2, 3, 4, 5]]\nsplit([1, 2, 3, 4, 5], 5) // [[1, 2, 3, 4], []]\nsplit([1, 2, 3, 4, 5], 0) // [[1, 2, 3, 4, 5]]\n```\n\nThe memory usage of this function depends on `iterable` and `separator`.\n\n### splitBy, splitByAsync\n```ts\nfunction splitBy\u003cT\u003e(\n  iterable: Iterable\u003cT\u003e\n, predicate: (element: T, index: number) =\u003e unknown\n): IterableIterator\u003cT[]\u003e\nfunction splitByAsync\u003cT\u003e(\n  iterable: Iterable\u003cT\u003e | AsyncIterable\u003cT\u003e\n, predicate: (element: Awaited\u003cT\u003e, index: number) =\u003e Awaitable\u003cunknown\u003e\n): AsyncIterableIterator\u003cArray\u003cAwaited\u003cT\u003e\u003e\u003e\n```\n\n```ts\nsplitBy([1, 2, 3, 4, 5], x =\u003e x === 3) // [[1, 2], [4, 5]]\nsplitBy([1, 2, 3, 4, 5], x =\u003e x === 1) // [[], [2, 3, 4, 5]]\nsplitBy([1, 2, 3, 4, 5], x =\u003e x === 5) // [[1, 2, 3, 4], []]\nsplitBy([1, 2, 3, 4, 5], x =\u003e x === 0) // [[1, 2, 3, 4, 5]]\n```\n\nThe memory usage of this function depends on `iterable` and `predicate`.\n\n### take, takeAsync\n```ts\nfunction take\u003cT\u003e(iterable: Iterable\u003cT\u003e, count: number): IterableIterator\u003cT\u003e\nfunction takeAsync\u003cT\u003e(\n  iterable: AsyncIterable\u003cT\u003e\n, count: number\n): AsyncIterableIterator\u003cAwaited\u003cT\u003e\u003e\n```\n\n```ts\ntake([1, 2, 3], 5) // [1, 2, 3]\ntake([1, 2, 3], 2) // [1, 2]\ntake([1, 2, 3], 0) // []\ntake([1, 2, 3], -1) // throw Error\n```\n\n### takeRight, takeRightAsync\n```ts\nfunction takeRight\u003cT\u003e(iterable: Iterable\u003cT\u003e, count: number): IterableIterator\u003cT\u003e\nfunction takeRightAsync\u003cT\u003e(\n  iterable: AsyncIterable\u003cT\u003e\n, count: number\n): AsyncIterableIterator\u003cAwaited\u003cT\u003e\u003e\n```\n\n```ts\ntakeRight([1, 2, 3], 2) // [2, 3]\ntakeRight([1, 2, 3], 5) // [1, 2, 3]\ntakeRight([1, 2, 3], 0) // []\ntakeRight([1, 2, 3], -1) // throw Error\n```\n\nThe memory usage of this function depends on `count`.\n\n### takeUntil, takeUntilAsync\n```ts\nfunction takeUntil\u003cT\u003e(\n  iterable: Iterable\u003cT\u003e\n, predicate: (element: T, index: number) =\u003e unknown\n): IterableIterator\u003cT\u003e\nfunction takeUntilAsync\u003cT\u003e(\n  iterable: Iterable\u003cT\u003e | AsyncIterable\u003cT\u003e\n, predicate: (element: Awaited\u003cT\u003e, index: number) =\u003e Awaitable\u003cunknown\u003e\n): AsyncIterableIterator\u003cAwaited\u003cT\u003e\u003e\n```\n\n```ts\ntakeUntil([1, 2, 3], x =\u003e x === 2) // [1]\n```\n\n### tap, tapAsync\n```ts\nfunction tap\u003cT\u003e(\n  iterable: Iterable\u003cT\u003e\n, fn: (element: T, index: number) =\u003e unknown\n): IterableIterator\u003cT\u003e\nfunction tapAsync\u003cT\u003e(\n  iterable: Iterable\u003cT\u003e | AsyncIterable\u003cT\u003e\n, fn: (element: Awaited\u003cT\u003e, index: number) =\u003e Awaitable\u003cunknown\u003e\n): AsyncIterableIterator\u003cAwaited\u003cT\u003e\u003e\n```\n\n```ts\ntap([1, 2, 3], x =\u003e console.log(x)) // [1, 2, 3]\n```\n\n### toAsyncIterable\n```ts\nfunction toAsyncIterable\u003cT\u003e(\n  iterable: Iterable\u003cAwaitable\u003cT\u003e\u003e\n): AsyncIterableIterator\u003cAwaited\u003cT\u003e\u003e\n```\n\n```ts\ntoAsyncIterable([1, 2, 3]) // AsyncIterable [1, 2, 3]\n```\n\n### transform, transformAsync\n```ts\nfunction transform\u003cT, U\u003e(\n  iterable: Iterable\u003cT\u003e\n, transformer: (iterable: Iterable\u003cT\u003e) =\u003e Iterable\u003cU\u003e\n): IterableIterator\u003cU\u003e\nfunction transformAsync\u003cT, U\u003e(\n  iterable: Iterable\u003cT\u003e\n, transformer: (iterable: Iterable\u003cT\u003e) =\u003e AsyncIterable\u003cU\u003e\n): AsyncIterableIterator\u003cAwaited\u003cU\u003e\u003e\nfunction transformAsync\u003cT, U\u003e(\n  iterable: AsyncIterable\u003cT\u003e\n, transformer: (iterable: AsyncIterable\u003cT\u003e) =\u003e AsyncIterable\u003cU\u003e\n): AsyncIterableIterator\u003cAwaited\u003cU\u003e\u003e\n```\n\n```ts\ntransform([1, 2, 3], function* double(iter) {\n  for (const element of iter) {\n    yield element * 2\n  }\n}) // [2, 4, 6]\n```\n\n### uniq, uniqAsync\n```ts\nfunction uniq\u003cT\u003e(iterable: Iterable\u003cT\u003e): IterableIterator\u003cT\u003e\nfunction uniqAsync\u003cT\u003e(iterable: AsyncIterable\u003cT\u003e): AsyncIterableIterator\u003cAwaited\u003cT\u003e\u003e\n```\n\n```ts\nuniq([1, 1, 2, 2, 3, 3]) // [1, 2, 3]\n```\n\nThe memory usage of this function depends on `iterable`.\n\n### uniqBy, uniqByAsync\n```ts\nfunction uniqBy\u003cT, U\u003e(\n  iterable: Iterable\u003cT\u003e\n, fn: (element: T, index: number) =\u003e U\n): IterableIterator\u003cT\u003e\nfunction uniqByAsync\u003cT, U\u003e(\n  iterable: Iterable\u003cT\u003e | AsyncIterable\u003cT\u003e\n, fn: (element: Awaited\u003cT\u003e, index: number) =\u003e Awaitable\u003cU\u003e\n): AsyncIterableIterator\u003cAwaited\u003cT\u003e\u003e\n```\n\n```ts\nuniqBy([1, 2, 3], x =\u003e x % 2) // [1, 2]\n```\n\nThe memory usage of this function depends on `fn`.\n\n### zip, zipAsync\n```ts\nfunction zip\u003cT, U extends Array\u003cIterable\u003cunknown\u003e\u003e\u003e(\n  iterable: Iterable\u003cT\u003e\n, ...otherIterables: U\n): IterableIterator\u003c[T, ...ExtractTypeTupleFromIterableTuple\u003cU\u003e]\u003e\nfunction zipAsync\u003c\n  T\n, U extends Array\u003cIterable\u003cAwaitable\u003cunknown\u003e\u003e | AsyncIterable\u003cAwaitable\u003cunknown\u003e\u003e\u003e\n\u003e(\n  iterable: Iterable\u003cAwaitable\u003cT\u003e\u003e | AsyncIterable\u003cAwaitable\u003cT\u003e\u003e\n, ...otherIterables: U\n): AsyncIterableIterator\u003c\n  [Awaited\u003cT\u003e, ...ExtractTypeTupleFromAsyncLikeIterableTuple\u003cU\u003e]\n\u003e\n```\n\n```ts\nzip([1, 2, 3], ['a', 'b', 'c']) // [[1, 'a'], [2, 'b'], [3, 'c']]\nzip([1, 2, 3], ['a', 'b']) // [[1, 'a'], [2, 'b']\nzip([1, 2, 3], ['a', 'b'], ['i', 'ii', 'iii']) // [[1, 'a', 'i'], [2, 'b', 'ii']]\n```\n\n### consume, consumerAsync\n```ts\nfunction consume\u003cT, U\u003e(iterable: Iterable\u003cT\u003e, consumer: (iterable: Iterable\u003cT\u003e) =\u003e U): U\nfunction consumeAsync\u003cT, U\u003e(\n  iterable: Iterable\u003cT\u003e\n, consumer: (iterable: Iterable\u003cT\u003e) =\u003e Awaitable\u003cU\u003e\n): Promise\u003cAwaited\u003cU\u003e\u003e\nfunction consumeAsync\u003cT, U\u003e(\n  iterable: AsyncIterable\u003cT\u003e\n, consumer: (iterable: AsyncIterable\u003cT\u003e) =\u003e Awaitable\u003cU\u003e\n): Promise\u003cAwaited\u003cU\u003e\u003e\n```\n\n```ts\nconsume([1, 2, 3], xs =\u003e new Set(xs)) // Set [1, 2, 3]\n```\n\n### each, eachAsync\n```ts\nfunction each\u003cT\u003e(\n  iterable: Iterable\u003cT\u003e\n, fn: (element: T, index: number) =\u003e unknown\n): void\nfunction eachAsync\u003cT\u003e(\n  iterable: Iterable\u003cT\u003e | AsyncIterable\u003cT\u003e\n, fn: (element: Awaited\u003cT\u003e, index: number) =\u003e Awaitable\u003cunknown\u003e\n): Promise\u003cvoid\u003e\n```\n\n```ts\neach([1, 2, 3], x =\u003e console.log(x)) // void\n```\n\n### every, everyAsync\n```ts\nfunction every\u003cT\u003e(\n  iterable: Iterable\u003cT\u003e\n, predicate: (element: T, index: number) =\u003e unknown\n): boolean\nfunction everyAsync\u003cT\u003e(\n  iterable: Iterable\u003cT\u003e | AsyncIterable\u003cT\u003e\n, predicate: (element: Awaited\u003cT\u003e, index: number) =\u003e Awaitable\u003cunknown\u003e\n): Promise\u003cboolean\u003e\n```\n\n```ts\nevery([1, 2, 3], x =\u003e x \u003c 5) // true\nevery([1, 2, 3], x =\u003e x \u003c= 2) // false\n```\n\n### find, findAsync\n```ts\nfunction find\u003cT\u003e(\n  iterable: Iterable\u003cT\u003e\n, predicate: (element: T, index: number) =\u003e unknown\n): T | undefined\nfunction findAsync\u003cT\u003e(\n  iterable: Iterable\u003cT\u003e | AsyncIterable\u003cT\u003e\n, predicate: (element: Awaited\u003cT\u003e, index: number) =\u003e Awaitable\u003cunknown\u003e\n): Promise\u003cAwaited\u003cT\u003e | undefined\u003e\n```\n\n```ts\nfind([1, 2, 3], x =\u003e x === 2) // 2\nfind([1, 2, 3], x =\u003e x === 4) // undefined\n```\n\n### findAllIndexes\n```ts\nfunction findAllIndexes\u003cT\u003e(\n  iterable: Iterable\u003cT\u003e\n, predicate: (value: T, index: number) =\u003e unknown\n): IterableIterator\u003cnumber\u003e\n```\n\n```ts\nfindAllIndexes([1, 2, 3], x =\u003e x % 2 === 1) // [0, 2]\n```\n\n### first, firstAsync\n```ts\nfunction first\u003cT\u003e(iterable: Iterable\u003cT\u003e): T | undefined\nfunction firstAsync\u003cT\u003e(iterable: AsyncIterable\u003cT\u003e): Promise\u003cAwaited\u003cT\u003e | undefined\u003e\n```\n\n```ts\nfirst([1, 2, 3]) // 1\nfirst([]) // undefined\n```\n\n### includes, includesAsync\n```ts\nfunction includes\u003cT\u003e(iterable: Iterable\u003cT\u003e, value: T): boolean\nfunction includesAsync\u003cT\u003e(\n  iterable: AsyncIterable\u003cT\u003e\n, value: Awaited\u003cT\u003e\n): Promise\u003cboolean\u003e\n```\n\n```ts\nincludes([1, 2, 3], 2) // true\nincludes([1, 2, 3], 4) // false\n```\n\n### last, lastAsync\n```ts\nfunction last\u003cT\u003e(iterable: Iterable\u003cT\u003e): T | undefined\nfunction lastAsync\u003cT\u003e(iterable: AsyncIterable\u003cT\u003e): Promise\u003cAwaited\u003cT\u003e | undefined\u003e\n```\n\n```ts\nlast([1, 2, 3]) // 3\nlast([]) // undefined\n```\n\n### reduce, reduceAsync\n```ts\nfunction reduce\u003cT\u003e(\n  iterable: Iterable\u003cT\u003e\n, fn: (accumulator: T, currentValue: T, index: number) =\u003e T\n): T\nfunction reduce\u003cT, U\u003e(\n  iterable: Iterable\u003cT\u003e\n, fn: (accumulator: U, currentValue: T, index: number) =\u003e U\n, initialValue: U\n): U\nfunction reduceAsync\u003cT\u003e(\n  iterable: Iterable\u003cT\u003e | AsyncIterable\u003cT\u003e\n, fn: (\n    accumulator: Awaited\u003cT\u003e\n  , currentValue: Awaited\u003cT\u003e\n  , index: number\n  ) =\u003e Awaitable\u003cAwaited\u003cT\u003e\u003e\n): Promise\u003cAwaited\u003cT\u003e\u003e\nfunction reduceAsync\u003cT, U\u003e(\n  iterable: Iterable\u003cT\u003e | AsyncIterable\u003cT\u003e\n, fn: (accumulator: Awaited\u003cU\u003e, currentValue: Awaited\u003cT\u003e, index: number) =\u003e Awaitable\u003cU\u003e\n, initialValue: U\n): Promise\u003cAwaited\u003cU\u003e\u003e\n```\n\n```ts\nreduce([], (acc, cur) =\u003e acc + cur) // throw Error\nreduce([1], (acc, cur) =\u003e acc + cur) // 1\nreduce([1, 2, 3], (acc, cur) =\u003e acc + cur) // 6\n\nreduce([1, 2, 3], (acc, cur, index) =\u003e {\n  acc.push([cur, index])\n  return acc\n}) // [[1, 0], [2, 1], [3, 2]]\n```\n\n### some, someAsync\n```ts\nfunction some\u003cT\u003e(\n  iterable: Iterable\u003cT\u003e\n, predicate: (element: T, index: number) =\u003e unknown\n): boolean\nfunction someAsync\u003cT\u003e(\n  iterable: Iterable\u003cT\u003e | AsyncIterable\u003cT\u003e\n, predicate: (element: Awaited\u003cT\u003e, index: number) =\u003e Awaitable\u003cunknown\u003e\n): Promise\u003cboolean\u003e\n```\n\n```ts\nsome([1, 2, 3], x =\u003e x === 2) // true\nsome([1, 2, 3], x =\u003e x === 4) // false\n```\n\n### toArray, toArrayAsync\n```ts\nfunction toArray\u003cT\u003e(iterable: Iterable\u003cT\u003e): T[]\nfunction toArrayAsync\u003cT\u003e(\n  iterable: AsyncIterable\u003cT\u003e\n): Promise\u003cArray\u003cAwaited\u003cT\u003e\u003e\u003e\n```\n\n```ts\ntoArray([1, 2, 3]) // Array [1, 2, 3]\n```\n\n### toSet, toSetAsync\n```ts\nfunction toSet\u003cT\u003e(iterable: Iterable\u003cT\u003e): Set\u003cT\u003e\nfunction toSetAsync\u003cT\u003e(\n  iterable: Iterable\u003cT\u003e | AsyncIterable\u003cT\u003e\n): Promise\u003cSet\u003cAwaited\u003cT\u003e\u003e\u003e\n```\n\n```ts\ntoSet([1, 1, 2, 2, 3, 3]) // Set [1, 2, 3]\n```\n\n### count, countAsync\n```ts\nfunction count(iterable: Iterable\u003cunknown\u003e): number\nfunction countAsync(iterable: AsyncIterable\u003cunknown\u003e): Promise\u003cnumber\u003e\n```\n\n```ts\ncount([1, 2, 3]) // 3\n```\n\n### groupBy, groupByAsync\n```ts\nfunction groupBy\u003cT, U\u003e(\n  iterable: Iterable\u003cT\u003e\n, fn: (element: T, index: number) =\u003e U\n): Map\u003cU, T[]\u003e\nfunction groupByAsync\u003cT, U\u003e(\n  iterable: Iterable\u003cT\u003e | AsyncIterable\u003cT\u003e\n, fn: (element: Awaited\u003cT\u003e, index: number) =\u003e Awaitable\u003cU\u003e\n): Promise\u003cMap\u003cAwaited\u003cU\u003e, Array\u003cAwaited\u003cT\u003e\u003e\u003e\u003e\n```\n\n```ts\ngroupBy([1, 2, 3], x =\u003e x % 2) // { 1: [1, 3], 0: [2] }\n```\n\n### prefetch, prefetchAsync\n```ts\nfunction prefetch\u003cT\u003e(iterable: Iterable\u003cT\u003e, size: number): AsyncIterableIterator\u003cT\u003e\nfunction prefetchAsync\u003cT\u003e(\n  iterable: AsyncIterable\u003cT\u003e\n, size: number\n): AsyncIterableIterator\u003cT\u003e\n```\n\n### top, topAsync\n```ts\nfunction top\u003cT\u003e(\n  iterable: Iterable\u003cT\u003e\n, num: number\n, compare: (a: T, b: T) =\u003e number\n): T[]\nfunction topAsync\u003cT\u003e(\n  iterable: AsyncIterable\u003cT\u003e\n, num: number\n, compare: (a: Awaited\u003cT\u003e, b: Awaited\u003cT\u003e) =\u003e number\n): Promise\u003cArray\u003cAwaited\u003cT\u003e\u003e\u003e\n```\n\n```ts\ntop([1, 2, 3], 2, (a, b) =\u003e b - a) // [3, 2]\n```\n\n### avg, avgAsync\n```ts\nfunction avg(iterable: Iterable\u003cnumber\u003e): number\nfunction avgAsync(iterable: AsyncIterable\u003cnumber\u003e): Promise\u003cnumber\u003e\n```\n\n```ts\navg([1, 2, 3]) // 2\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblackglory%2Fiterable-operator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fblackglory%2Fiterable-operator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblackglory%2Fiterable-operator/lists"}