Skip to main content

Array

Utility functions for Array.

Live Editor
Result
Loading...

all

Returns true if all elements of the array match the predicate function, otherwise, returns false.

function all<A>(xs: Array<A>, predicateFn: (_1: A) => boolean): boolean
function all<A>(predicateFn: (_1: A) => boolean): (xs: Array<A>) => boolean
A.all(['hello', 'world'], value => value.length > 0) // → true
pipe(
[1, 2, 3, 4, 5],
A.all(value => value > 3),
) // → false

any

Returns true if at least one of the elements of the array match the predicate function, otherwise, returns false.

function any<A>(xs: Array<A>, predicateFn: (_1: A) => boolean): boolean
function any<A>(predicateFn: (_1: A) => boolean): (xs: Array<A>) => boolean
A.any(['', 'hello', 'world'], value => value.length > 0) // → true
pipe(
[1, 2, 3, 4, 5],
A.any(value => value > 5),
) // → false

append

Adds a single element to the end of an array.

function append<A>(xs: Array<A>, element: A): Array<A>
function append<A>(element: A): (xs: Array<A>) => Array<A>

at

Alias for get.

function at<A>(xs: Array<A>, index: number): Option<A>
function at<A>(index: number): (xs: Array<A>) => Option<A>

concat

Returns a new array containing the concatenation of two provided arrays.

function concat<A>(xs1: Array<A>): (xs0: Array<A>) => Array<A>
function concat<A>(xs0: Array<A>, xs1: Array<A>): Array<A>

concatMany

Returns a new array as the concatenation of the provided array of arrays.

function concatMany<A>(xs: Array<Array<A>>): Array<A>

copy

Returns a copy of the provided array.

function copy<A>(xs: Array<A>): Array<A>

deepFlat

Creates a new array with all sub-array elements concatenated into it recursively up to the Infinite depth.

function deepFlat<A>(xs: Array<A>): Array<ExtractNested<A>>

difference

Returns elements from the first array, not existing in the second array.

function difference<A>(ys: Array<A>): (xs: Array<A>) => Array<A>
function difference<A>(xs: Array<A>, ys: Array<A>): Array<A>
A.difference([1, 2, 3, 4], [3, 4, 5, 6]) // → [1, 2]
pipe([5, 2, 3, 5, 6], A.difference([5, 2, 3, 1, 5, 4])) // → [6]

drop

Returns a new array that does not contain the first n elements of the provided array, or an empty array if n is either less than 0 or greater than the length of the provided array.

function drop<A>(xs: Array<A>, n: number): Array<A>
function drop<A>(n: number): (xs: Array<A>) => Array<A>
A.drop([1], 1) // → []
A.drop([1, 2, 3], 4) // → []
A.drop([1, 2, 3], 2) // → [3]
pipe([1, 2, 3, 4], A.drop(2)) // → [3, 4]

dropExactly

Returns a new array (Some(xs)) that does not contain the first n elements of the provided array, or None if n is either less than 0 or greater than the length of the provided array.

function dropExactly<A>(xs: Array<A>, n: number): Option<Array<A>>
function dropExactly<A>(n: number): (xs: Array<A>) => Option<Array<A>>

dropWhile

Drops elements from the beginning of the array until an element is reached which does not satisfy the given predicate.

function dropWhile<A>(xs: Array<A>, predicateFn: (_1: A) => boolean): Array<A>
function dropWhile<A>(predicateFn: (_1: A) => boolean): (xs: Array<A>) => Array<A>

eq

Returns false if length of both arrays is not the same, otherwise compares elements one by one using the comparator.

function eq<A>(xs0: Array<A>, xs1: Array<A>, comparatorFn: (_1: A, _2: A) => boolean): boolean
function eq<A>(xs1: Array<A>, comparatorFn: (_1: A, _2: A) => boolean): (xs0: Array<A>) => boolean

every

Returns `true`` if all elements satisfy the given predicate.

function every<A>(xs: Array<A>, fn: (_1: A) => boolean): boolean
function every<A>(fn: (_1: A) => boolean): (xs: Array<A>) => boolean

filter

Returns a new array that keep all elements satisfy the given predicate.

function filter<A, B extends A>(xs: Array<A>, predicateFn: (value: A) => value is B): Array<B>
function filter<A, B extends A>(predicateFn: (value: A) => value is B): (xs: Array<A>) => Array<B>
function filter<A>(xs: Array<A>, predicateFn: (value: A) => boolean): Array<A>
function filter<A>(predicateFn: (value: A) => boolean): (xs: Array<A>) => Array<A>
A.filter([1, 2, 3, 4], value => value % 2 === 0) // → [2, 4]
pipe(
[1, 2, 3, 4, 5, 6, 7, 8, 9],
A.filter(value => value % 2 === 0),
) // → [2, 4, 6, 8]

pipe(
['hello', 'wo', 'rld'],
A.filter(value => value.length < 4),
) // → ['wo', 'rld']

filterMap

Returns a new array that keep all elements that return Some(value) applied within predicateFn.

function filterMap<A, B>(xs: Array<A>, predicateFn: (_1: A) => Option<B>): Array<B>
function filterMap<A, B>(predicateFn: (_1: A) => Option<B>): (xs: Array<A>) => Array<B>
A.filterMap(['', 'hello', 'world', ''], value => {
return value.length > 0 ? O.Some(value.length) : O.None
}) // → [5, 5]

pipe(
[1, 2, 3, 4, 5],
A.filterMap(value => {
return value % 2 === 0 ? O.Some(value * 2) : O.None
}),
) // → [4, 8]

filterWithIndex

Returns a new array that keep all elements satisfy the given predicate (which take two arguments: the element for the array and its index).

function filterWithIndex<A, B extends A>(xs: Array<A>, predicateFn: (index: number, value: A) => value is B): Array<B>
function filterWithIndex<A, B extends A>(predicateFn: (index: number, value: A) => value is B): (xs: Array<A>) => Array<B>
function filterWithIndex<A>(xs: Array<A>, predicateFn: (index: number, value: A) => boolean): Array<A>
function filterWithIndex<A>(predicateFn: (index: number, value: A) => boolean): (xs: Array<A>) => Array<A>

find

Alias for getBy.

function find<A>(xs: Array<A>, predicateFn: (_1: A) => boolean): Option<A>
function find<A>(predicateFn: (_1: A) => boolean): (xs: Array<A>) => Option<A>

flat

Creates a new array with all sub-array elements concatenated into it (the single level depth).

function flat<A>(xs: Array<A>): Array<A extends Array<infer B> ? B : A>

flip

Returns a new tuple with the reverse order of the elements.

function flip<A, B>(xs: readonly [A, B]): readonly [B, A]
A.flip([1, 2]) // → [2, 1]
pipe(
{ name: 'Joe', location: 'Warsaw' },
D.toPairs,
A.map(A.flip),
D.fromPairs,
) // → { Joe: 'name', Warsaw: 'location' }

forEach

Calls fn on each element of the provided array.

function forEach<A>(xs: Array<A>, fn: (_1: A) => void): void
function forEach<A>(fn: (_1: A) => void): (xs: Array<A>) => void

forEachWithIndex

Calls fn (which takes two arguments: the element from array and its index) on each element of the provided array.

function forEachWithIndex<A>(xs: Array<A>, fn: (_1: number, _2: A) => void): void
function forEachWithIndex<A>(fn: (_1: number, _2: A) => void): (xs: Array<A>) => void

get

Returns Some(value) at the given index, or None if the given index is out of range.

function get<A>(xs: Array<A>, index: number): Option<A>
function get<A>(index: number): (xs: Array<A>) => Option<A>

getBy

Returns Some(value) for the first element in the array that satisifies the given predicate function, or None if no element satisifies the predicate.

function getBy<A>(xs: Array<A>, predicateFn: (_1: A) => boolean): Option<A>
function getBy<A>(predicateFn: (_1: A) => boolean): (xs: Array<A>) => Option<A>

getIndexBy

Returns Some(index) for the first value in the provided array that satisifies the predicate function.

function getIndexBy<A>(xs: Array<A>, predicateFn: (_1: A) => boolean): Option<number>
function getIndexBy<A>(predicateFn: (_1: A) => boolean): (xs: Array<A>) => Option<number>

getUndefined

Returns value at the given index, or undefined if the given index is out of range.

function getUndefined<A>(xs: Array<A>, index: number): A | undefined
function getUndefined<A>(index: number): (xs: Array<A>) => A | undefined

getUnsafe

Returns value at the given index (use only if you're entirely sure that a value exists at the given index).

function getUnsafe<A>(xs: Array<A>, index: number): A
function getUnsafe<A>(index: number): (xs: Array<A>) => A

groupBy

Splits the given array into sub-arrays in an object, grouped by the result of running each value through the provided function.

function groupBy<A, B extends PropertyKey>(xs: Array<A>, groupFn: (item: A) => B): Partial<Record<B, readonly [A, ...A[]]>>
function groupBy<A, B extends PropertyKey>(groupFn: (item: A) => B): (xs: Array<A>) => Partial<Record<B, readonly [A, ...A[]]>>

Returns Some(value) where value is the first element of the array, or None if the given array is empty.

function head<A>(xs: Array<A>): Option<A>

includes

Returns true if the provided value is equal to at least one element of the given array.

function includes<A>(xs: Array<A>, value: A): boolean
function includes<A>(value: A): (xs: Array<A>) => boolean

init

Returns a new array (Some(xs)) with all elements except the last of the provided array.

function init<A>(xs: Array<A>): Option<Array<A>>

initOrEmpty

Returns a new array with all elements except the last of the provided array, or an empty array if the given array is empty.

function initOrEmpty<A>(xs: Array<A>): Array<A>

insertAt

Creates a new array that inserts the given value at the given index (no insertion is made if the index is out of range).

function insertAt<A>(xs: Array<A>, targetIndex: number, element: A): Array<A>
function insertAt<A>(targetIndex: number, element: A): (xs: Array<A>) => Array<A>

intersection

Returns intersection of two arrays.

function intersection<A>(ys: Array<A>): (xs: Array<A>) => Array<A>
function intersection<A>(xs: Array<A>, ys: Array<A>): Array<A>
A.intersection([1, 2, 3, 4], [3, 4, 5, 6]) // → [3, 4]
pipe([5, 2, 3, 5, 6], A.intersection([5, 2, 3, 1, 5, 4])) // → [5, 2, 3]

intersperse

Creates a new array with the separator interposed between elements.

function intersperse<A>(xs: Array<A>, delimiter: A): Array<A>
function intersperse<A>(delimiter: A): (xs: Array<A>) => Array<A>

isEmpty

Determines whether the given array is empty.

function isEmpty<A>(xs: Array<A>): boolean
A.isEmpty(['hello', 'world']) // → false
A.isEmpty([]) // → true
pipe([1, 2, 3], A.isEmpty) // → false

isNotEmpty

Determines whether the given array is not empty.

function isNotEmpty<A>(xs: Array<A>): boolean
A.isNotEmpty(['hello', 'world']) // → true
A.isNotEmpty([]) // → false
pipe([1, 2, 3], A.isNotEmpty) // → true

join

Converts each element of the array to a string and concatenates them, separated by the given string.

function join<A>(xs: Array<A>, delimiter: string): string
function join<A>(delimiter: string): (xs: Array<A>) => string

keep

Alias for filter.

function keep<A, B extends A>(xs: Array<A>, predicateFn: (value: A) => value is B): Array<B>
function keep<A, B extends A>(predicateFn: (value: A) => value is B): (xs: Array<A>) => Array<B>
function keep<A>(xs: Array<A>, predicateFn: (value: A) => boolean): Array<A>
function keep<A>(predicateFn: (value: A) => boolean): (xs: Array<A>) => Array<A>

keepMap

Alias for filterMap.

function keepMap<A, B>(xs: Array<A>, predicateFn: (_1: A) => Option<B>): Array<B>
function keepMap<A, B>(predicateFn: (_1: A) => Option<B>): (xs: Array<A>) => Array<B>

keepWithIndex

Alias for filterWithIndex.

function keepWithIndex<A, B extends A>(xs: Array<A>, predicateFn: (index: number, value: A) => value is B): Array<B>
function keepWithIndex<A, B extends A>(predicateFn: (index: number, value: A) => value is B): (xs: Array<A>) => Array<B>
function keepWithIndex<A>(xs: Array<A>, predicateFn: (index: number, value: A) => boolean): Array<A>
function keepWithIndex<A>(predicateFn: (index: number, value: A) => boolean): (xs: Array<A>) => Array<A>

last

Returns the last element (Some(value)) in the array, or None if the given array is empty.

function last<A>(xs: Array<A>): Option<A>

length

Returns the size of the provided array.

function length<A>(xs: Array<A>): number
A.length(['hello', 'world']) // → 2
pipe([0, 2, 4], A.length) // → 3

make

Returns a new array of size n populated by element, or an empty array if n is negative.

function make<A>(n: number, element: A): Array<A>
function make<A>(element: A): (n: number) => Array<A>
A.make(-1, 'hello') // → []
A.make(3, 1) // → [1, 1, 1]
pipe(2, A.make('hello')) // → ['hello', 'hello']

makeEmpty

Creates an empty array. Alternative for const xs = [] as ReadonlyArray<A>.

function makeEmpty<A>(): Array<A>
A.makeEmpty<number>() // → []

makeWithIndex

Returns a new array of size n populated by mapFn(index), or an empty array if n is negative.

function makeWithIndex<A>(n: number, mapFn: (_1: number) => A): Array<A>
function makeWithIndex<A>(mapFn: (_1: number) => A): (n: number) => Array<A>
A.makeWithIndex(5, index => index * 2) // → [0, 2, 4, 6, 8]

map

Returns a new array by calling mapFn for each element of the provided array.

function map<A, B>(xs: Array<A>, mapFn: (_1: A) => B): Array<B>
function map<A, B>(mapFn: (_1: A) => B): (xs: Array<A>) => Array<B>

mapWithIndex

Returns a new array by calling mapFn (which takes two arguments: the element from array and its index) for each element of the provided array.

function mapWithIndex<A, B>(xs: Array<A>, mapFn: (_1: number, _2: A) => B): Array<B>
function mapWithIndex<A, B>(mapFn: (_1: number, _2: A) => B): (xs: Array<A>) => Array<B>

partition

Splits the provided array into two separate arrays - one containing elements which satisfy the predicate, and the other array containing the elements which do not satisfy the predicate.

function partition<A, B extends A>(xs: Array<A>, predicateFn: (value: A) => value is B): readonly [Array<B>, Array<Exclude<A, B>>]
function partition<A, B extends A>(predicateFn: (value: A) => value is B): (xs: Array<A>) => readonly [Array<B>, Array<Exclude<A, B>>]
function partition<A>(xs: Array<A>, predicateFn: (value: A) => boolean): readonly [Array<A>, Array<A>]
function partition<A>(predicateFn: (value: A) => boolean): (xs: Array<A>) => readonly [Array<A>, Array<A>]
A.partition([1, 2, 3, 4], value => value > 2) // → [[3, 4],[1, 2]]
pipe([1, 'hello', 2, 'world'], A.partition(G.isString)) // → [['hello', 'world'], [1, 2]]

prepend

Prepends a single element to the start of the given array.

function prepend<A>(xs: Array<A>, element: A): Array<A>
function prepend<A>(element: A): (xs: Array<A>) => Array<A>

prependToAll

Returns a new array which contains the given delimiter inserted before every element in the provided array.

function prependToAll<A>(xs: Array<A>, delimiter: A): Array<A>
function prependToAll<A>(delimiter: A): (xs: Array<A>) => Array<A>

range

Returns a new inclusive array of numbers from start to finish (it returns an empty array when start > finish).

function range(finish: number): (start: number) => Array<number>
function range(start: number, finish: number): Array<number>

rangeBy

Returns a new inclusive array of numbers from start to finish (it returns an empty array when step is 0 or negative, it also returns an empty array when start > finish).

function rangeBy(finish: number, step: number): (start: number) => Array<number>
function rangeBy(start: number, finish: number, step: number): Array<number>

reduce

Applies reduceFn (which has two parameters: an accumulator which starts with a value of initialValue and the next value from the array) to each element of the provided array, and eventually it returns the final value of the accumulator.

function reduce<A, B>(xs: Array<A>, initialValue: B, reduceFn: (_1: B, _2: A) => B): B
function reduce<A, B>(initialValue: B, reduceFn: (_1: B, _2: A) => B): (xs: Array<A>) => B

reduceReverse

Works like A.reduce, except that the function reduceFn is applied to each item of xs from the last back to the first.

function reduceReverse<A, B>(xs: Array<A>, initialValue: B, reduceFn: (_1: B, _2: A) => B): B
function reduceReverse<A, B>(initialValue: B, reduceFn: (_1: B, _2: A) => B): (xs: Array<A>) => B

reduceWithIndex

Applies reduceFn (which has three parameters: an accumulator which starts with a value of initialValue, the next value from the array and its index) to each element of the provided array, and eventually it returns the final value of the accumulator.

function reduceWithIndex<A, B>(xs: Array<A>, initialValue: B, reduceFn: (_1: B, _2: A, _3: number) => B): B
function reduceWithIndex<A, B>(initialValue: B, reduceFn: (_1: B, _2: A, _3: number) => B): (xs: Array<A>) => B

reject

Returns a new array of elements from the provided array which do not satisfy the given predicate.

function reject<A>(xs: Array<A>, predicateFn: (_1: A) => boolean): Array<A>
function reject<A>(predicateFn: (_1: A) => boolean): (xs: Array<A>) => Array<A>

rejectWithIndex

Returns a new array of elements from the provided array which do not satisfy the given predicate (which take two arguments: the element for the array and its index).

function rejectWithIndex<A>(xs: Array<A>, predicateFn: (_1: number, _2: A) => boolean): Array<A>
function rejectWithIndex<A>(predicateFn: (_1: number, _2: A) => boolean): (xs: Array<A>) => Array<A>

removeAt

Creates a new array without the element at the given index (the original array if the index is out of range).

function removeAt<A>(xs: Array<A>, targetIndex: number): Array<A>
function removeAt<A>(targetIndex: number): (xs: Array<A>) => Array<A>

removeFirst

Creates a copy of the given array with the first occurrence of the given element removed

function removeFirst<A>(xs: Array<A>, value: A): Array<A>
function removeFirst<A>(value: A): (xs: Array<A>) => Array<A>
A.removeFirst(['hello', 'hello', 'world'], 'hello') // → ['hello', 'world']
pipe([4, 5, 2, 1, 3], A.removeFirst(1)) // → [4, 5, 2, 3]

removeFirstBy

Removes the first occurrence of the given value from the array, using the given equality function.

function removeFirstBy<A, B>(xs: Array<A>, value: B, predicateFn: (_1: A, _2: B) => boolean): Array<A>
function removeFirstBy<A, B>(value: B, predicateFn: (_1: A, _2: B) => boolean): (xs: Array<A>) => Array<A>
A.removeFirstBy([1, 2, 1, 3, 4], 2, N.gt) // → [1, 2, 1, 4]
pipe(
['hello', 'wrld', 'world'],
A.removeFirstBy(4, (str, length) => str.length === length),
) // → ['hello', 'world']

repeat

Alias for make.

function repeat<A>(n: number, element: A): Array<A>
function repeat<A>(element: A): (n: number) => Array<A>

replaceAt

Creates a new array by replacing the value at the given index with the given value (no replacement is made if the index is out of range).

function replaceAt<A>(xs: Array<A>, targetIndex: number, element: A): Array<A>
function replaceAt<A>(targetIndex: number, element: A): (xs: Array<A>) => Array<A>

reverse

Returns a new array with the elements of the provided array in reverse order.

function reverse<A>(xs: Array<A>): Array<A>
A.reverse([1, 2, 3, 4, 5]) // → [5, 4, 3, 2, 1]
pipe(['hello', 'world'], A.reverse) // → ['world', 'hello']

shuffle

Returns a new array with elements in the original array randomly shuffled.

function shuffle<A>(xs: Array<A>): Array<A>

slice

Returns a new array with the len elements of the given array starting at offset (offset can be negative).

function slice<A>(xs: Array<A>, offset: number, len: number): Array<A>
function slice<A>(offset: number, len: number): (xs: Array<A>) => Array<A>

sliceToEnd

Returns a new array with the elements of the given array starting at offset (offset can be negative).

function sliceToEnd<A>(xs: Array<A>, offset: number): Array<A>
function sliceToEnd<A>(offset: number): (xs: Array<A>) => Array<A>

some

Returns true if at least one of the elements in the given array satifies the predicate.

function some<A>(xs: Array<A>, fn: (_1: A) => boolean): boolean
function some<A>(fn: (_1: A) => boolean): (xs: Array<A>) => boolean

sort

Returns a new array, sorted according to the comparator function.

function sort<A>(xs: Array<A>, sortFn: (_1: A, _2: A) => number): Array<A>
function sort<A>(sortFn: (_1: A, _2: A) => number): (xs: Array<A>) => Array<A>

sortBy

Returns a new array, sorted according to the provided function.

function sortBy<A, B>(xs: Array<A>, sortFn: (_1: A) => B): Array<A>
function sortBy<A, B>(sortFn: (_1: A) => B): (xs: Array<A>) => Array<A>

splitAt

Returns two arrays (Some([xs, ys])), with the original array divided at the given index, or None if the index is out of range.

function splitAt<A>(xs: Array<A>, offset: number): Option<readonly [Array<A>, Array<A>]>
function splitAt<A>(offset: number): (xs: Array<A>) => Option<readonly [Array<A>, Array<A>]>

splitEvery

Returns an array of arrays, where each of the inner arrays has length equal to the provided size parameter.

function splitEvery<A>(xs: Array<A>, size: number): Array<Array<A>>
function splitEvery<A>(size: number): (xs: Array<A>) => Array<Array<A>>

swapAt

Creates a new array with the elements at the two given indexes swapped (the original array if the index is out of range).

function swapAt<A>(xs: Array<A>, targetIndex: number, swapIndex: number): Array<A>
function swapAt<A>(targetIndex: number, swapIndex: number): (xs: Array<A>) => Array<A>

tail

Returns a new array containing all but the the first element of the provided array, or None if the given array is empty (has no tail).

function tail<A>(xs: Array<A>): Option<Array<A>>
A.tail([1, 2, 3]) // → Some([2, 3])
A.tail([1]) // → Some([])
A.tail([]) // → None
pipe([1, 2, 3, 4], A.tail) // → Some([2, 3, 4])

tailOrEmpty

Returns a new array containing all but the first element of the provided array, or an empty array if the given array is empty (has no tail).

function tailOrEmpty<A>(xs: Array<A>): Array<A>

take

Returns a new array including the first n elements of the provided array, or an empty array if n is either negative or greater than the length of the provided array.

function take<A>(xs: Array<A>, n: number): Array<A>
function take<A>(n: number): (xs: Array<A>) => Array<A>

takeExactly

Returns a new array (Some(xs)) with the first n elements of the provided array, or None if n is either negative or greater than the length of the provided array.

function takeExactly<A>(xs: Array<A>, n: number): Option<Array<A>>
function takeExactly<A>(n: number): (xs: Array<A>) => Option<Array<A>>

takeWhile

Returns a new array, filled with elements from the provided array until an element doesn't pass the provided predicate.

function takeWhile<A>(xs: Array<A>, predicateFn: (_1: A) => boolean): Array<A>
function takeWhile<A>(predicateFn: (_1: A) => boolean): (xs: Array<A>) => Array<A>

tap

Applies a side-effect function on each element of the provided array.

function tap<A>(xs: Array<A>, fn: (_1: A) => void): Array<A>
function tap<A>(fn: (_1: A) => void): (xs: Array<A>) => Array<A>

toTuple

Converts the given array to the TypeScript's tuple.

function toTuple<T extends Array<any>>(xs: readonly [...T]): readonly [...T]

uncons

Splits the provided array into head and tail parts (as a tuple), but only if the array is not empty.

function uncons<A>(xs: Array<A>): Option<readonly [A, Array<A>]>

union

Returns union of two arrays.

function union<A>(ys: Array<A>): (xs: Array<A>) => Array<A>
function union<A>(xs: Array<A>, ys: Array<A>): Array<A>
A.union([1, 2, 3, 4], [3, 4, 5, 6]) // → [1, 2, 3, 4, 5, 6]
pipe([5, 2, 3, 5, 6], A.union([5, 2, 3, 1, 5, 4])) // → [5, 2, 3, 6, 1, 4]

uniq

Returns a new array containing only one copy of each element in the provided array.

function uniq<A>(xs: Array<A>): Array<A>
A.uniq([1, 2, 2, 3, 4, 4, 5, 6]) // → [1, 2, 3, 4, 5, 6,]
A.uniq([[1, 2], [2, 1], [1, 2], [3, 4]]) // → [[1, 2], [2, 1], [3, 4]]

A.uniq([
{ name: 'John', age: 20 },
{ name: 'Emily', age: 30 },
{ name: 'John', age: 20 },
]) // → [{ name: 'John', age: 20 }, { name: 'Emily', age: 30 }]

pipe([1, 2, 2, 3, 4, 4, 5, 6], A.uniq) // → [1, 2, 3, 4, 5, 6,]

uniqBy

Returns a new array containing only one copy of each element in the provided array, based upon the value returned by applying the function to each element.

function uniqBy<A, B>(xs: Array<A>, uniqFn: (_1: A) => B): Array<A>
function uniqBy<A, B>(uniqFn: (_1: A) => B): (xs: Array<A>) => Array<A>
A.uniqBy([1, 2, 2, 3, 4, 4, 5, 6], F.identity) // → [1, 2, 3, 4, 5, 6,]
A.uniqBy(
[
{ name: 'Joe', age: 20 },
{ name: 'John', age: 20 },
],
user => user.age,
) // → [{ name: 'Joe', age: 20 }]

pipe([1, 2, 2, 3, 4, 4, 5, 6], A.uniqBy(F.identity)) // → [1, 2, 3, 4, 5, 6,]

unzip

Takes an array of pairs and creates a pair of arrays. The first array contains all the first elements of the pairs and the other one contains all the second elements.

function unzip<A, B>(xs: Array<readonly [A, B]>): readonly [Array<A>, Array<B>]

updateAt

Creates a new array that replaces the value at the given index with the value returned by the provided function (the original array if the index is out of range).

function updateAt<A>(xs: Array<A>, targetIndex: number, fn: (_1: A) => A): Array<A>
function updateAt<A>(targetIndex: number, fn: (_1: A) => A): (xs: Array<A>) => Array<A>

zip

Creates a new array of pairs from corresponding elements of two provided arrays.

function zip<A, B>(xs1: Array<B>): (xs0: Array<A>) => Array<readonly [A, B]>
function zip<A, B>(xs0: Array<A>, xs1: Array<B>): Array<readonly [A, B]>

zipWith

Creates a new array by applying zipFn to corresponding elements of two provided arrays.

function zipWith<A, B, C>(xs0: Array<A>, xs1: Array<B>, zipFn: (_1: A, _2: B) => C): Array<C>
function zipWith<A, B, C>(xs1: Array<B>, zipFn: (_1: A, _2: B) => C): (xs0: Array<A>) => Array<C>

zipWithIndex

Creates a new array of each value paired with its index in a tuple.

function zipWithIndex<A>(xs: Array<A>): Array<readonly [A, number]>
A.zipWithIndex(['hello', 'world']) // → [['hello', 0], ['world', 1]]