misc-utils-of-mine-generic
Version:
Miscellaneous utilities for JavaScript/TypeScript that I often use
24 lines (19 loc) • 955 B
text/typescript
import { dedup } from './filter'
export function unionEquals<T>(a: T[], b: T[], predicate: (a: T, b: T) => boolean = (a, b) => a === b, output?: T[]): T[] {
var r = dedup([...a, ...b], predicate)
output && output.push(...dedup([...r, ...output], predicate))
return r
}
export const arrayUnion = unionEquals
export function arrayInterception<A = any>(a: A[], b: A[], predicate: (a: A, b: A) => boolean = (a, b) => a === b, output?: A[]): A[] {
var r = a.filter(a => b.find(b => predicate(a, b)))
r = dedup(r, predicate)
output && output.push(...dedup([...r, ...output], predicate))
return r
}
export function arrayDifference<A = any>(a: A[], b: A[], predicate: (a: A, b: A) => boolean = (a, b) => a === b, output?: A[]): A[] {
var r = a.filter(a => !b.find(b => predicate(a, b))).concat(b.filter(b => !a.find(a => predicate(b, a))))
r = dedup(r, predicate)
output && output.push(...dedup([...r, ...output], predicate))
return r
}