export const sortBy = (array: T[], getter: (item: T) => unknown): T[] => { const sortedArray = [...array]; sortedArray.sort((a, b) => // @ts-ignore getter(a) > getter(b) ? 1 : getter(b) > getter(a) ? -1 : 0, ); return sortedArray; }; export const difference = (...arrays: T[][]): T[] => { return arrays.reduce((a, b) => a.filter((c) => !b.includes(c))); }; export const toggleListItem = (list: T[], item: T): T[] => { const itemIndex = list.indexOf(item); if (itemIndex === -1) { return list.concat(item); } else { const newList = [...list]; newList.splice(itemIndex, 1); return newList; } };