lodashを自作で代替していく
代替品
range
引数1個のときはこれで
code:ts
export const range = (n1: number, n2?: number) => {
if (n2 == null) {
}
const start = n1;
const end = n2;
};
code:ts
export const range = (size: number, startAt = 0) =>
こういうインターフェースにしたいんだよな〜
code:ts
type F = (start:number, end:number, step:number) => number[]
flatten
code:ts
export function flatten1<T>(xs: (T | T[])[]): T[];
export function flatten1<T>(xs: T[][]): T[] {
return xs.reduce(
[]
);
}
取り急ぎ、level1のflatのみをする関数
debounce
code:ts
// debounce
export const debounce = (fn: (...args: any[]) => void, time: number) => {
let timeoutId: number | null;
return wrapper;
function wrapper(...args: any[]) {
if (timeoutId != null) {
clearTimeout(timeoutId);
}
timeoutId = setTimeout(() => {
timeoutId = null;
fn(...args);
}, time);
}
};
これ気をつけないといけない
例えば1000を指定すると、連打している間は、大丈夫だが、1回クリックしてそのちょうど1s後ぐらいにクリックすると行けてしまう
keyBy
正規化する
code:ts
const keyBy = <T, K extends string | number, R extends { key in keyof T: T }>( arr: T[],
key: (e: T) => K
) => arr.reduce((acc, cur) => ({ ...acc, key(cur): cur }), {} as R); code:使用例.ts
const obj = id: 1, value: 'hoge' }, { id: 2, value: 'piyo' }, { id: 3, value: 'pien' };
keyBy(obj, a => a.id);
// {
// '1': { id: 1, value: 'hoge' },
// '2': { id: 2, value: 'piyo' },
/// '3': { id: 3, value: 'pien' }
// }