UNPKG

1.8 kBJavaScriptView Raw
1/**
2 * Utility module to work with Arrays.
3 *
4 * @module array
5 */
6
7/**
8 * Return the last element of an array. The element must exist
9 *
10 * @template L
11 * @param {Array<L>} arr
12 * @return {L}
13 */
14export const last = arr => arr[arr.length - 1]
15
16/**
17 * @template C
18 * @return {Array<C>}
19 */
20export const create = () => /** @type {Array<C>} */ ([])
21
22/**
23 * @template D
24 * @param {Array<D>} a
25 * @return {Array<D>}
26 */
27export const copy = a => /** @type {Array<D>} */ (a.slice())
28
29/**
30 * Append elements from src to dest
31 *
32 * @template M
33 * @param {Array<M>} dest
34 * @param {Array<M>} src
35 */
36export const appendTo = (dest, src) => {
37 for (let i = 0; i < src.length; i++) {
38 dest.push(src[i])
39 }
40}
41
42/**
43 * Transforms something array-like to an actual Array.
44 *
45 * @function
46 * @template T
47 * @param {ArrayLike<T>|Iterable<T>} arraylike
48 * @return {T}
49 */
50export const from = Array.from
51
52/**
53 * True iff condition holds on every element in the Array.
54 *
55 * @function
56 * @template ITEM
57 *
58 * @param {Array<ITEM>} arr
59 * @param {function(ITEM, number, Array<ITEM>):boolean} f
60 * @return {boolean}
61 */
62export const every = (arr, f) => arr.every(f)
63
64/**
65 * True iff condition holds on some element in the Array.
66 *
67 * @function
68 * @template S
69 * @param {Array<S>} arr
70 * @param {function(S, number, Array<S>):boolean} f
71 * @return {boolean}
72 */
73export const some = (arr, f) => arr.some(f)
74
75/**
76 * @template ELEM
77 *
78 * @param {Array<ELEM>} a
79 * @param {Array<ELEM>} b
80 * @return {boolean}
81 */
82export const equalFlat = (a, b) => a.length === b.length && every(a, (item, index) => item === b[index])
83
84/**
85 * @template ELEM
86 * @param {Array<Array<ELEM>>} arr
87 * @return {Array<ELEM>}
88 */
89export const flatten = arr => arr.reduce((acc, val) => acc.concat(val), [])
90
91export const isArray = Array.isArray