UNPKG

@acrool/js-utils

Version:

Common javascript utils methods for project development

196 lines (195 loc) 4.65 kB
import { SortOrder, TSortByFn, TGroupTreeBy, TGroupByFn, TArrayOrEmpty } from './types'; /** * 插入資料到陣列的第一筆 * * pull([1,2], 3) * > [3,1,2] * * @param arrayData * @param pullData */ export declare function pull<T, A extends TArrayOrEmpty<T>>(arrayData: A, pullData: T): A; /** * 插入資料到陣列的結尾 * * push([1,2], 3) * > [1,2,3] * * @param arrayData * @param pushData */ export declare function push<T, A extends TArrayOrEmpty<T>>(arrayData: A, pushData: T): T[]; /** * 插入資料到陣列中 * * insert([1,2,3], 1, 4) * > [1,4,2,3] * * @param arrayData * @param index * @param data */ export declare function insert<T, A extends TArrayOrEmpty<T>>(arrayData: A, index: number, data: T): T[]; /** * 移動陣列順序 * * move([A, B, C], 1, 2) * > [A, C, B] * * @param arrayData * @param index * @param toIndex */ export declare function move<T, A extends TArrayOrEmpty<T>>(arrayData: A, index: number, toIndex: number): A; /** * 依賴 findIndex 後 removeByIndex * * removeFind([1,2,3], (item) => item === 2) * > [1,3] * * @param arrayData * @param fn */ export declare function removeFind<T, A extends TArrayOrEmpty<T>>(arrayData: T[] | A, fn: (item: T) => boolean): A; /** * 依賴 findIndex 後 updateByIndex * * updateFind([ * {id: 1, text: 'a'}, * {id: 2, text: 'b'}, * ],{ * finder: (item) => item.id === 2, * updater: (item) => { item.text = 'X'; } * } * ) * > [ * {id: 1, text: 'a'}, * {id: 2, text: 'X'}, * ] * * @param arrayData * @param args */ export declare function updateFind<T, A extends TArrayOrEmpty<T>>(arrayData: T[] | A, args: { finder: (item: T) => boolean; updater: (item: T) => void; }): A; /** * 刪除陣列中的一筆資料 * * removeByIndex([1,2,3], 1) * > [1,3] * * @param arrayData * @param index */ export declare function removeByIndex<T, A extends TArrayOrEmpty<T>>(arrayData: T[] | A, index: number): A; /** * 更改陣列中的一筆資料 * * updateByIndex([{name: 'jack'}], 0, {name: 'imagine'}) * > [{name: 'imagine'}] * * @param arrayData * @param index * @param updateFn */ export declare function updateByIndex<T, A extends TArrayOrEmpty<T>>(arrayData: T[] | A, index: number, updateFn: (item: T) => void): A; /** * 取得陣列中的唯一值 * * unique(['a', 'a', 'c']) * > ['a', 'c'] * * @param data * @param selector */ export declare function unique<T>(data: T[], selector?: (item: T) => any): T[]; /** * 陣列轉字串 (發生例外錯誤回傳 空陣列) * * arrayJoin(['a', 'b'], ',') * > 'a,b' * * @param arrayData * @param separator */ export declare function arrayJoin(arrayData: TArrayOrEmpty<string>, separator: string): string; /** * 取得陣列第一筆資料 * arraySplit(['a','b','c']); * > a */ export declare function arrayFirst<T = undefined>(array?: T[]): T | undefined; /** * 分割陣列 * * arraySplit([1,2,3,4,5], 2) * > [[1,2], [3,4], [5]] * * @param arrayData * @param splitCount */ export declare function arraySplit<T, A extends TArrayOrEmpty<T>>(arrayData: A, splitCount: number): A | T[][]; /** * GroupBy * * groupBy([{name: 'a', age: 1}, {name: 'b', age: 2}], (item) => item.age) * > {1: [{name: 'a', age: 1}], 2: [{name: 'b', age: 2}]} * * @param array * @param fn */ export declare function groupBy<T>(array: T[], fn: TGroupByFn<T>): Record<string | number, T[]>; /** * Group TreeBy * * groupTreeBy([{name: 'a', age: 1}, {name: 'b', age: 2}], (item) => { * return { * groupKey: item.age, * groupData: {age: item.age}, * child: item * } * }) * > [{age: 1, children: [{name: 'a', age: 1}]}, {age: 2, children: [{name: 'b', age: 2}]}] * * * @param array * @param groupByFn */ export declare function groupTreeBy<T, D, C>(array: T[], groupByFn: TGroupTreeBy<T, D, C>): Array<D & { children: C[]; }>; /** * Sort * * sort([3,2,1], (a, b) => a - b) * > [1,2,3] * * @param array * @param fn */ export declare function sort<T>(array: T[], fn: TSortByFn<T>): T[]; /** * 生成排序方法 * @param selector * @param order */ export declare function generateSortByProperty<T>(selector: (row: T) => any, order?: SortOrder): (a: T, b: T) => number; /** * 生成 Array 數量 * @param count 生成多少個 * @param prefixKeyName 前綴 Key name */ export declare const generatorArray: (count: number, prefixKeyName?: string) => string[]; /** * 循環切換 * const toggle = generatorArrayToggle(['a','b','c']); * toggle(a) * > b * toggle(b) * > c * toggle(c) * > a */ export declare function generatorArrayToggle<T>(data: T[]): (current: T) => T;