{"id":22433829,"url":"https://github.com/gavinning/helper","last_synced_at":"2025-03-27T07:46:18.482Z","repository":{"id":147923303,"uuid":"415579727","full_name":"gavinning/helper","owner":"gavinning","description":"nodejs helper","archived":false,"fork":false,"pushed_at":"2021-10-21T07:34:13.000Z","size":94,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-01T12:46:44.331Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gavinning.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-10-10T12:29:39.000Z","updated_at":"2021-10-21T07:34:15.000Z","dependencies_parsed_at":"2023-05-27T23:48:08.327Z","dependency_job_id":null,"html_url":"https://github.com/gavinning/helper","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gavinning%2Fhelper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gavinning%2Fhelper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gavinning%2Fhelper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gavinning%2Fhelper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gavinning","download_url":"https://codeload.github.com/gavinning/helper/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245806392,"owners_count":20675296,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-05T22:16:01.402Z","updated_at":"2025-03-27T07:46:18.476Z","avatar_url":"https://github.com/gavinning.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Helper\n常用方法库\n\n### Usage\n```sh\nnpm i @4a/helper\nyarn add @4a/helper\n```\n```ts\nimport { ... } from '@4a/helper'\n```\n\n### Assert\n```ts\nfunction ok(condition: any, message: string): void;\nfunction not(condition: any, message: string): void;\n```\n\n### Array\n```ts\nfunction asyncMap(arr: Promise\u003cany\u003e[], fn: ArrayPromiseCallback): Promise\u003cany[]\u003e;\nfunction asyncFind(arr: Promise\u003cany\u003e[], fn: BoolPromiseCallback): Promise\u003cany\u003e;\nfunction asyncFilter(arr: Promise\u003cany\u003e[], fn: BoolPromiseCallback): Promise\u003cany[]\u003e;\nfunction asyncSome(arr: Promise\u003cany\u003e[], fn: BoolPromiseCallback): Promise\u003cboolean\u003e;\nfunction asyncEvery(arr: Promise\u003cany\u003e[], fn: BoolPromiseCallback): Promise\u003cboolean\u003e;\n/**\n * 从数组中删除一个元素\n * @param arr\n * @param val 值或回调函数\n * @returns 修改数组本身\n */\nfunction remove(arr: any[], val: any | BoolCallback): any[];\n/**\n * 从数组中删除一个元素\n * @param arr\n * @param val 值或回调函数\n * @returns 原始数组保持不变，返回新数组\n */\nfunction removed(arr: any[], val: any | BoolCallback): any[];\n/**\n * 数组去重，使用set特性，只对值数组生效\n * @param arr\n * @description Array.from(new Set(arr))\n */\nfunction uniqued(arr: any[]): any[];\n/**\n * 数组最大值\n * @param {number[] | any[]} arr\n * @param {CompareCallback} fn arr是number[]时fn为空，arr是any[]时fn必须\n */\nfunction max(arr: number[]): number;\nfunction max(arr: any[], fn: CompareCallback): any;\n/**\n * 数组排序，支持自定义排序，默认排序规则：\u003e\n * @param arr\n * @param rule 自定义排序规则\n */\nfunction sorted(arr: any[], rule?: CompareInput): any[];\n```\n\n### Date\n```ts\nconst date: {\n    /**\n     * 日期格式化，日期+时间\n     * @param date\n     * @returns YYYY-MM-DD HH:mm:ss\n     */\n    format(date: MomentInput): string;\n    /**\n     * 日期格式化，仅日期没有时间\n     * @param date\n     * @returns YYYY-MM-DD\n     */\n    formatDate(date: MomentInput): string;\n    /**\n     * 今天的日期\n     * @returns YYYY-MM-DD\n     */\n    today(): string;\n    /**\n     * 今天的日期\n     * @returns Moment(YYYY-MM-DD)\n     */\n    todayStart(): moment.Moment;\n    /**\n     * 明天的日期\n     * @returns Moment(YYYY-MM-DD).add(1, 'days')\n     */\n    todayEnd(): moment.Moment;\n    /**\n     * 日期向后偏移\n     * @param date 日期\n     * @param days 向后偏移天数，默认=1\n     * @returns YYYY-MM-DD\n     */\n    afterDay(date: MomentInput, days?: number): string;\n    isToday(date: MomentInput): boolean;\n    /**\n     *\n     * @param amount 增加数量\n     * @param unit 单位，默认 = 'days'\n     * @returns YYYY-MM-DD HH:mm:ss\n     */\n    add(amount: DurationInputArg1, unit?: DurationInputArg2): string;\n    /**\n     * 连续时间区间\n     * @param offset 区间天数\n     * @param shift 漂移天数，向前推移的天数\n     */\n    offsetDays(offset: number, shift?: number): string[];\n};\n```\n\n### is\n```ts\nfunction isArray(obj: any): boolean;\nfunction isPlainObject(obj: any): boolean;\nfunction isString(obj: any): boolean;\nfunction isFunction(obj: any): boolean;\nfunction isEmptyObject(obj: any): boolean;\n```\n\n### Lib\n```ts\nfunction http(baseURL: string): string;\nfunction https(baseURL: string): string;\nfunction random(min: number, max: number): number;\n/**\n * 概率计算，基于Math.random的随机概率\n * @d 分子\n * @m 分母\n */\nfunction ratio(d: number, m: number): boolean;\n/**\n * @array\n * 支持数组，数组使用arr.slice(0)\n * @description\n * 深度clone，基于JSON.parse(JSON.stringify(obj))，不能拷贝循环引用的对象\n */\nfunction clone\u003cT\u003e(obj: T): T;\n/**\n * Array =\u003e Map\n * @param arr   数组\n * @param key   数组子对象的key\n * @param fn    处理key值的回调\n */\nfunction toMap(arr: PlainObject[], key: string, fn?: ToMapCallback): PlainObject;\n/**\n * Array =\u003e Map\n * @param arr\n * @param keys\n * @returns\n */\nfunction makeMap(arr: PlainObject[], keys: string[]): PlainObject;\n/**\n * Map =\u003e Array\n * @param map Map数据\n * @param fn  处理数据的回调\n * @example toArray({a:1}, (key, value) =\u003e key) ==\u003e ['a']\n * @example toArray({a:1}, (key, value) =\u003e value) ==\u003e [1]\n */\nfunction toArray(map: PlainObject, fn: (key: string, value: any) =\u003e any): any[];\n/**\n * 获取一个Map的key的数组\n * @param map Map对象\n * @param fn  对key的处理回调\n */\nfunction getKeys(map: PlainObject, fn: (key: string) =\u003e string): string[];\n/**\n * 获取一个Map的value的数组\n * @param map Map对象\n * @param fn  对value的处理回调\n */\nfunction getValues(map: PlainObject, fn: (value: any) =\u003e any): any[];\n\n```\n\n### Url\n```ts\nfunction urlParse(url: string): {\n    protocol: string;\n    port: string;\n    host: string;\n    username: string;\n    password: string;\n    pathname: string;\n    query: import(\"url\").URLSearchParams;\n};\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgavinning%2Fhelper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgavinning%2Fhelper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgavinning%2Fhelper/lists"}