18 lines
465 B
TypeScript
18 lines
465 B
TypeScript
/**
|
||
* Returns the difference between two arrays (A - B)
|
||
*/
|
||
export function arrayDifferenceBy< T >( a: T[], b: T[], key: keyof T ) {
|
||
const keys = new Set( b.map( ( item ) => item[ key ] ) );
|
||
|
||
return a.filter( ( item ) => ! keys.has( item[ key ] ) );
|
||
}
|
||
|
||
/**
|
||
* Returns the union of two arrays (A ∪ B)
|
||
*/
|
||
export function arrayUnionBy< T >( a: T[], b: T[], key: keyof T ) {
|
||
const difference = arrayDifferenceBy( b, a, key );
|
||
|
||
return [ ...a, ...difference ];
|
||
}
|