Appearance
Array
_range
Quickly generate an incremental array of numbers.
- Starts with 0, unless specified differently
- Step is 1, unless specified differently
- Lower bound is inclusive, higher-bound is exclusive.
ts
_range(3)
// [0, 1, 2]
_range(3, 6)
// [3, 4, 5]
_range(1, 10, 2)
// [1, 3, 5, 7, 9]
_chunk
Splits an input array into "chunks" of defined size. Last/remaining chunk may be of "incomplete" size. Returns array-of-arrays.
ts
const a = [1, 2, 3, 4, 5, 6]
_chunk(a, 2)
// [[1, 2], [3, 4], [5, 6]]
_chunk(a, 3)
// [[1, 2, 3], [4, 5, 6]]
_chunk(a, 4)
// [[1, 2, 3, 4], [5, 6]]]
_flatten
Polyfill to Array.flat()
with depth=1. From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat
ts
_flatten([
[1, 2],
[3, 4],
])
// [1, 2, 3, 4]
_flattenDeep
Based on https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore#_flattendeep
Recursive Array.flat()
, with infinite depth.
ts
_flattenDeep([
[
[1, 2],
[3, 4],
],
[5, 6],
[7],
])
// [1, 2, 3, 4, 5, 6, 7]
_uniq
Convenience function to remove duplicates from an array of primitives.
ts
const a = [1, 2, 2, 3]
_uniq(a)
// [1, 2, 3]
_uniqBy
Remove duplicates from array of objects, providing a comparator function.
ts
const a = [{ age: 18 }, { age: 20 }, { age: 18 }]
_uniqBy(a, obj => obj.age)
// [{ age: 18 }, { age: 20 }]
_by
ts
const a = [
{ id: 'id1', a: 'a1' },
{ id: 'id2', b: 'b1' },
]
_by(a, r => r.id)
// {
// id1: {id: 'id1', a: 'a1'},
// id2: {id: 'id2', b: 'b1'},
//}
_groupBy
ts
const a = [1, 2, 3, 4, 5]
_groupBy(a, r => (r % 2 ? 'even' : 'odd'))
// {
// odd: [1, 3, 5],
// even: [2, 4],
// }
Returning undefined
from the Mapper will EXCLUDE the item.
_sortBy
Sort an array of object, providing a comparator function.
ts
const a = [{ age: 18 }, { age: 20 }, { age: 19 }]
_sortBy(a, obj => obj.age)
// [{ age: 18 }, {age: 19 }, { age: 20 }]
_sortNumbers
Sort an array of numbers. Needs a special treatment because of a caveat, that a default comparator function compares things as Strings (even Numbers), so '21' > '100'.
ts
const a = [1, 3, 2]
_sortNumbers(a)
// [1, 2, 3]
_findLast
Like .find()
, but tries to find an element from the END of the array.
ts
const a = [1, 2, 3, 4, 5]
_findLast(a, n => n % 2 === 0)
// 4
_takeWhile, _takeRightWhile, _dropWhile, _dropRightWhile
ts
const a = [1, 2, 3, 4, 5, 2, 1]
_takeWhile(a, r => r <= 3)
// [1, 2, 3]
_takeRightWhile(a, r => r <= 3)
// [1, 2]
// Note that the order is reversed when taking from Right!
_dropWhile(a, r => r <= 3)
// [4, 5, 2, 1]
_dropRightWhile(a, r => r <= 3)
// [5, 4, 3, 2, 1]
// Note that the order is reversed when dropping from Right!
_countBy
ts
_countBy(['a', 'aa', 'aaa', 'aaa', 'aaaa'], r => r.length)
// {
// 1: 1,
// 2: 1,
// 3: 2,
// 4: 1,
// })
_intersection
Inspired by Lodash's _.intersection.
ts
_intersection([2, 1], [2, 3])
// [2]
_intersection([1], [2])
// []
_intersection()
// []
_intersection([1])
// [1]
_difference
Inspired by Lodash's _.difference
ts
_difference([2, 1], [2, 3])
// [1]
_difference([1], [2])
// [1]
_difference([1], [1])
// []
_difference([1])
// [1]
_sum
Inspired by Lodash's _.sum
Same as Lodash, sum of empty array returns 0 (not NaN, not error)
ts
_sum([]) // 0
_sum([1]) // 1
_sum([1, 2]) // 3
_sumBy
Inspired by Lodash's _.sumBy
ts
const items = [
{ a: 1 },
{ a: 2 },
{ b: 3 }, // `a` is undefined (not a number) here, will be treated as 0
]
_sumBy(items, i => i.a) // 1 + 2 + 0 == 3
_mapToObject
Map an array of T
to a StringMap<V>
, by returning a tuple of [key, value]
from a mapper function.
Return undefined
/null
/false
/0
/void
to filter out (not include) a value.
Similar to reduce
, but with subjectively cleaner syntax of returning "entries".
Similar to mapping to "entries" and passing to Object.fromEntries()
.
ts
_mapToObject([1, 2, 3], n => [n, n * 2])
// { '1': 2, '2': 4, '3': 6 }
_mapToObject([1, 2, 3], n => [n, `id${n}`])
// { '1': 'id1, '2': 'id2', '3': 'id3' }
_shuffle
Randomly shuffle an array values.
Uses Fisher–Yates algorithm.
Based on: https://stackoverflow.com/a/12646864/4919972
ts
const a = [1, 2, 3, 4, 5]
const b = _shuffle(a)
// [3, 1, 2, 5, 4]
// Mutating example
_shuffle(a)
// a == [4, 2, 3, 1, 5]
_last
Returns last element of the array, or undefined
if the array is empty.
Very simple semantic convenience method (lodash-inspired).
ts
const a = [1, 2, 3]
_last(a) // 3
const a = []
_last(a) // undefined