export function uniques(array: any[], comp: (a: any, b: any) => boolean = (a, b) => a === b) { const len = array.length, res = new Array(len); let c = 0; function fresh(value: any) { for (let j = 0; j < c; j++) { if (comp(value, res[j])) { return false; } } return true; } for (let i = 0; i < len; i++) { if (fresh(array[i])) { res[c++] = array[i]; } } res.length = c; return res; } export function uniquesByAtt(array: Array<{ [k in K]: any }>, att: K) { return uniques(array, (a, b) => a[att] === b[att]); }