32 lines
724 B
JavaScript
32 lines
724 B
JavaScript
'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
|
|
}
|