1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
| 'use strict'
|
| /**
| * Concat and flattens non-null values.
| * Ex: concat(1, undefined, 2, [3, 4]) = [1, 2, 3, 4]
| */
| function concat () {
| const args = Array.from(arguments).filter(e => e != null)
| const baseArray = Array.isArray(args[0]) ? args[0] : [args[0]]
| return Array.prototype.concat.apply(baseArray, args.slice(1))
| }
|
| /**
| * Dedupes array based on criterion returned from iteratee function.
| * Ex: uniqueBy(
| * [{ id: 1 }, { id: 1 }, { id: 2 }],
| * val => val.id
| * ) = [{ id: 1 }, { id: 2 }]
| */
| function uniqueBy (arr, fun) {
| const seen = {}
| return arr.filter(el => {
| const e = fun(el)
| return !(e in seen) && (seen[e] = 1)
| })
| }
|
| module.exports = {
| concat: concat,
| uniqueBy: uniqueBy
| }
|
|