Skip to content

Commit 262d862

Browse files
committed
feat(groupByEquality): implement groupByEquality functions
1 parent e3a6850 commit 262d862

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

index.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -405,6 +405,27 @@ export function groupFn<T>(compare: Comparator<T>): (array: ArrayLike<T>) => T[]
405405
return array => group(array, compare);
406406
}
407407

408+
export function groupByEquality<T>(array: ArrayLike<T>, equal: (a: T, b: T) => boolean): T[][] {
409+
const result: T[][] = [];
410+
411+
outer: for (let i = 0; i < array.length; ++i) {
412+
for (let j = 0; j < result.length; ++j) {
413+
if (equal(result[j][0], array[i])) {
414+
result[j].push(array[i]);
415+
continue outer;
416+
}
417+
}
418+
419+
result.push([array[i]]);
420+
}
421+
422+
return result;
423+
}
424+
425+
export function groupByEqualityFn<T>(equal: (a: T, b: T) => boolean): (array: ArrayLike<T>) => T[][] {
426+
return array => groupByEquality(array, equal);
427+
}
428+
408429
export function groupByHash<T>(array: ArrayLike<T>, hash: (element: T, index: number) => string): T[][] {
409430
const groups: Dictionary<T[]> = Object.create(null);
410431
const result: T[][] = [];

0 commit comments

Comments
 (0)