Removed unused utility functions
This commit is contained in:
parent
c5987de47e
commit
1a95418fef
|
@ -1,3 +0,0 @@
|
||||||
# Prelude
|
|
||||||
このディレクトリのコードはJavaScriptの表現能力を補うためのコードです。
|
|
||||||
Misskey固有の処理とは独立したコードの集まりですが、Misskeyのコードを読みやすくすることを目的としています。
|
|
|
@ -1,4 +1,4 @@
|
||||||
import type { EndoRelation, Predicate } from "./relation.js";
|
import type {Predicate} from "./relation.js";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Count the number of elements that satisfy the predicate
|
* Count the number of elements that satisfy the predicate
|
||||||
|
@ -30,21 +30,6 @@ export function intersperse<T>(sep: T, xs: T[]): T[] {
|
||||||
return concat(xs.map((x) => [sep, x])).slice(1);
|
return concat(xs.map((x) => [sep, x])).slice(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the array of elements that is not equal to the element
|
|
||||||
*/
|
|
||||||
export function erase<T>(a: T, xs: T[]): T[] {
|
|
||||||
return xs.filter((x) => x !== a);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Finds the array of all elements in the first array not contained in the second array.
|
|
||||||
* The order of result values are determined by the first array.
|
|
||||||
*/
|
|
||||||
export function difference<T>(xs: T[], ys: T[]): T[] {
|
|
||||||
return xs.filter((x) => !ys.includes(x));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove all but the first element from every group of equivalent elements
|
* Remove all but the first element from every group of equivalent elements
|
||||||
*/
|
*/
|
||||||
|
@ -60,75 +45,6 @@ export function maximum(xs: number[]): number {
|
||||||
return Math.max(...xs);
|
return Math.max(...xs);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Splits an array based on the equivalence relation.
|
|
||||||
* The concatenation of the result is equal to the argument.
|
|
||||||
*/
|
|
||||||
export function groupBy<T>(f: EndoRelation<T>, 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Splits an array based on the equivalence relation induced by the function.
|
|
||||||
* The concatenation of the result is equal to the argument.
|
|
||||||
*/
|
|
||||||
export function groupOn<T, S>(f: (x: T) => S, xs: T[]): T[][] {
|
|
||||||
return groupBy((a, b) => f(a) === f(b), xs);
|
|
||||||
}
|
|
||||||
|
|
||||||
export function groupByX<T>(collections: T[], keySelector: (x: T) => string) {
|
|
||||||
return collections.reduce((obj: Record<string, T[]>, item: T) => {
|
|
||||||
const key = keySelector(item);
|
|
||||||
if (!Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
||||||
obj[key] = [];
|
|
||||||
}
|
|
||||||
|
|
||||||
obj[key].push(item);
|
|
||||||
|
|
||||||
return obj;
|
|
||||||
}, {});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Compare two arrays by lexicographical order
|
|
||||||
*/
|
|
||||||
export function lessThan(xs: number[], ys: number[]): boolean {
|
|
||||||
for (let i = 0; i < Math.min(xs.length, ys.length); i++) {
|
|
||||||
if (xs[i] < ys[i]) return true;
|
|
||||||
if (xs[i] > ys[i]) return false;
|
|
||||||
}
|
|
||||||
return xs.length < ys.length;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the longest prefix of elements that satisfy the predicate
|
|
||||||
*/
|
|
||||||
export function takeWhile<T>(f: Predicate<T>, xs: T[]): T[] {
|
|
||||||
const ys = [];
|
|
||||||
for (const x of xs) {
|
|
||||||
if (f(x)) {
|
|
||||||
ys.push(x);
|
|
||||||
} else {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ys;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function cumulativeSum(xs: number[]): number[] {
|
|
||||||
const ys = Array.from(xs); // deep copy
|
|
||||||
for (let i = 1; i < ys.length; i++) ys[i] += ys[i - 1];
|
|
||||||
return ys;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function toArray<T>(x: T | T[] | undefined): T[] {
|
export function toArray<T>(x: T | T[] | undefined): T[] {
|
||||||
return Array.isArray(x) ? x : x != null ? [x] : [];
|
return Array.isArray(x) ? x : x != null ? [x] : [];
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
export function gcd(a: number, b: number): number {
|
|
||||||
return b === 0 ? a : gcd(b, a % b);
|
|
||||||
}
|
|
|
@ -1,20 +0,0 @@
|
||||||
export interface IMaybe<T> {
|
|
||||||
isJust(): this is IJust<T>;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface IJust<T> extends IMaybe<T> {
|
|
||||||
get(): T;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function just<T>(value: T): IJust<T> {
|
|
||||||
return {
|
|
||||||
isJust: () => true,
|
|
||||||
get: () => value,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
export function nothing<T>(): IMaybe<T> {
|
|
||||||
return {
|
|
||||||
isJust: () => false,
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,5 +1 @@
|
||||||
export type Predicate<T> = (a: T) => boolean;
|
export type Predicate<T> = (a: T) => boolean;
|
||||||
|
|
||||||
export type Relation<T, U> = (a: T, b: U) => boolean;
|
|
||||||
|
|
||||||
export type EndoRelation<T> = Relation<T, T>;
|
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
export function concat(xs: string[]): string {
|
|
||||||
return xs.join("");
|
|
||||||
}
|
|
||||||
|
|
||||||
export function capitalize(s: string): string {
|
|
||||||
return toUpperCase(s.charAt(0)) + toLowerCase(s.slice(1));
|
|
||||||
}
|
|
||||||
|
|
||||||
export function toUpperCase(s: string): string {
|
|
||||||
return s.toUpperCase();
|
|
||||||
}
|
|
||||||
|
|
||||||
export function toLowerCase(s: string): string {
|
|
||||||
return s.toLowerCase();
|
|
||||||
}
|
|
Loading…
Reference in New Issue