diff options
| author | syuilo <syuilotan@yahoo.co.jp> | 2018-11-09 13:47:28 +0900 |
|---|---|---|
| committer | syuilo <syuilotan@yahoo.co.jp> | 2018-11-09 13:47:28 +0900 |
| commit | 51ba738c4b3c8769ffb896d921f48793c72c5c5e (patch) | |
| tree | c75bb8198f9fe04f19f4073bad746d8d545448d1 /src/prelude/array.ts | |
| parent | Fix i18n (diff) | |
| parent | Add group function (#3175) (diff) | |
| download | misskey-51ba738c4b3c8769ffb896d921f48793c72c5c5e.tar.gz misskey-51ba738c4b3c8769ffb896d921f48793c72c5c5e.tar.bz2 misskey-51ba738c4b3c8769ffb896d921f48793c72c5c5e.zip | |
Merge branch 'develop' of https://github.com/syuilo/misskey into develop
Diffstat (limited to 'src/prelude/array.ts')
| -rw-r--r-- | src/prelude/array.ts | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/prelude/array.ts b/src/prelude/array.ts index 54f7081712..8536e486d6 100644 --- a/src/prelude/array.ts +++ b/src/prelude/array.ts @@ -18,6 +18,10 @@ export function erase<T>(x: T, xs: T[]): T[] { return xs.filter(y => x !== y); } +export function setDifference<T>(xs: T[], ys: T[]): T[] { + return xs.filter(x => !ys.includes(x)); +} + export function unique<T>(xs: T[]): T[] { return [...new Set(xs)]; } @@ -25,3 +29,19 @@ export function unique<T>(xs: T[]): T[] { export function sum(xs: number[]): number { return xs.reduce((a, b) => a + b, 0); } + +export function groupBy<T>(f: (x: T, y: T) => boolean, xs: T[]): T[][] { + const groups = [] as T[][]; + for (const x of xs) { + if (groups.length !== 0 && f(groups[groups.length - 1][0], x)) { + groups[groups.length - 1].push(x); + } else { + groups.push([x]); + } + } + return groups; +} + +export function groupOn<T, S>(f: (x: T) => S, xs: T[]): T[][] { + return groupBy((a, b) => f(a) === f(b), xs); +} |