编程工具集-我的JavaScript/TypeScript/NodeJS实用工具模块

news2025/2/27 14:00:00
JavaScript/TypeScript编程工具集
JavaScript/TypeScript/NodeJS实用工具模块

作者李俊才 (jcLee95):https://blog.csdn.net/qq_28550263?spm=1001.2101.3001.5343
邮箱 :291148484@163.com
本文地址:https://blog.csdn.net/qq_28550263/article/details/130460102
模块 npm 地址:https://www.npmjs.com/package/@jcstdio/jc-utils



1. 介绍 与 安装

1.1 介绍

这个模块是我的个人工具模块,用于记录和收集各种用于 JavaScript/TypeScript 中的编程小工具。这些小工具来源于日常的开发或者阅读源码等待不同场景下的总结,即相当于我的笔记本,也是我用于真实项目中直接拿来用的工具。这些工具都比较小,故而放在一起。也欢迎读者朋友参与维护,一起添加更多的小工具。

1.2 安装(npm、yarn、pnpm)

npm i @jcstdio/jc-utils
# or
yarn add @jcstdio/jc-utils
# or
pnpm i @jcstdio/jc-utils

2. 判断工具(isXXX)

这部分函数主要用于各种判断,都是一些最常用的判断工具。其实很多开源项目都重复实现过它们。

// 如:
import { isBoolean } from '@jcstdio/jc-utils'

第一组 isXXX 工具

这一部分多数是类型相关的判断,但也有例外。

工具名描述
isBoolean判断是否是布尔值
isString判断是否是字符串
isNumber判断是否是数字,不包括字符串等表示的数字
isOddNumber判断一个数字是否是奇数
isEvenNumber判断一个数字是否是偶数数
isInt是否是整数
isObject是否是普通对象
isArray是否是数组
isFunction是否是函数
isMap是否是映射(ES6 Map)
isSet是否是集合(ES6 Set)
isRegExp是否是正则
isPromise是否是 Promise
isDefined是否非 undefined
isUndefined是否是 undefined
isNull是否是 null
isNullAndUndefinedisUndefined 且 isNull 返回 true
isNullOrUndefinedisNull 或 isUndefined 返回 true
isNotBrowser和一些开发者封装的 isServer 一样,返回 typeof window === 'undefined'

第二组 isXXX 工具:字符串匹配

这一组 isXXX 工具主要是通过正则表达式来检测是否是某个格式的字符串。这些工具是笔者个人觉得可能用得更多的,你也可以通过 12. 正则与正则工具 中现成的正则表达式变量来快速封装(使用正则对象的 test 方法)。

工具名描述
isChinese匹配是否为中文字符
isEnglish匹配是否为英文字母
isUrl匹配是否为URL地址
isPhone匹配是否为手机号码字符串
isEmail匹配是否为邮箱地址
isIdCard匹配是否为身份证号码字符串
isNumberStr匹配数字字符串
isDecimalStr匹配小数字符串
isIntegerStr匹配整数字符串
isTime匹配时间字符串 格式:hh:mm:ss
isPostalCode匹配邮政编码字符串
isHtmlTag匹配HTML标签字符串
isQQ匹配QQ号码字符串
isWechat匹配微信号字符串
isLicensePlate匹配车牌号码字符串
isHexColor匹配16进制颜色值字符串
isChineseName匹配中文姓名字符串
isBankCard匹配银行卡号字符串
isNumberAndLetter匹配数字和字母组合字符串
isChineseEnglishNumberUnderline匹配中文、英文、数字和下划线组成的字符串
isChineseEnglishNumberSpace匹配中文、英文、数字和空格组成的字符串
isChineseEnglishNumberDash匹配中文、英文、数字和中划线组成的字符串
isChineseEnglishNumberSlash匹配中文、英文、数字和斜杠组成的字符串
isChineseEnglishNumberColon匹配中文、英文、数字和冒号组成的字符串
isChineseEnglishNumberQuestion匹配中文、英文、数字和问号组成的字符串
isChineseEnglishNumberExclamation匹配中文、英文、数字和感叹号组成的字符串

3. 事件发布器 - Event.EventEmitter

这个对象是 发布订阅 模式在 事件(event)中的应用,它与 NodeJS 环境下的 EventEmitter 对象具体几乎一样的接口。请参考我的博文:《发布订阅模式原理及其应用(多种语言实现)》:https://editor.csdn.net/md/?articleId=129930814。有了这个对象,你也可以在 浏览器 环境中直接玩 EventEmitter

import { EventEmitter } from '@jcstdio/jc-utils'

4. 状态管理器 - Event.StateManager

这是我尝试使用发布订阅模式实现状态管理时实现的一个对象。请参考下面的例子:

import { StateManager } from '@jcstdio/jc-utils'

const stateManager = new StateManager<{
    value:number
}>({ value: 0, });

const sideEffec1 = (state: { value: any; }) => {
    console.log('我是 sideEffec1 ,状态被更新,当前状态值为:', state.value);
}

const sideEffec2 = () => {
  console.log('我是 sideEffec2 ,执行顺序为执行 “subscribe” 方法的顺序。')
}

// 设置状态更新后的回调,可以采用链式调用
stateManager
  .subscribe(sideEffec1)
  .subscribe(sideEffec2)

// 更新你的状态
console.log('------- 第一次改变状态 -------');
stateManager.state = { value: 1 };

console.log('\n------- 第二次改变状态 -------');
stateManager
  .unsubscribe(sideEffec2)  // 取消状态发生改变时订阅的 sideEffec2。
  .state = { value: 2 };    // 指挥执行没有被取消的订阅

output is:

------- 第一次改变状态 -------
我是 sideEffec1 ,状态被更新,当前状态值为: 1
我是 sideEffec2 ,执行顺序为执行 “subscribe” 方法的顺序。

------- 第二次改变状态 -------
我是 sideEffec1 ,状态被更新,当前状态值为: 2

5. 动画工具

这个受启发于 JQuery 中提供的同名函数。早期我用 JQuery做手风琴效果时,用过这样的函数:

// JQuery
$(".btn1").click(function(){
  $("p").slideUp();
});

$("button").click(function(){
$("p").slideDown();
});

我当然不会在 vue 之类的项目中安装一个 JQuery 然后掉用 JQuery 的 slideUp、slideDown 等方法。于是自己封装了以一下。

以下是在一个 Vue3 的单文件组件中使用我封装版本的 slide 函数例子:

<template>
<ul @click="$event=>callBack()" ref="ulRef">
  <li>1</li>
  <li>2</li>
  <li>3</li>
  <li>4</li>
  <li>5</li>
</ul>
</template>

<script setup lang="ts">
import { getCurrentInstance, ref } from 'vue';
import type { ComponentInternalInstance } from 'vue;
import { slideUp, slideDown, slideToggle } from '@jcstdio/jc-utils'


const that = getCurrentInstance() as ComponentInternalInstance;

let callBack: () => void;

onMounted(()=>{
  const ulRef; = that.refs.ulRef as HTMLElement;
  callBack = () => {
    slideToggle(navRef);
  };
})
</script>

6. 日志器工具:Logger

这是一个轻量级的日志器,它的色彩系统基于 jc-color 模块,意味着其高亮显示可以同时在 NodeJS 终端浏览器 终端 中使用:

import { Logger } from '@jcstdio/jc-utils'

const logger = new Logger('')
logger.trace('trace')
logger.debug('debug')
logger.info('info')
logger.success('success')
logger.warn('warn')
logger.error('error')
logger.fatal('fatal')
logger.level1('level1')
logger.level2('level2')
logger.level3('level3')
logger.gradient('geadientText')

logger.png

7. 配置文件工具:

7.1 ini 配置文件读取器:IniConfig

import { IniConfig } from '@jcstdio/jc-utils'

该工具的类型签名为:

declare class IniConfig {
    private _filePath;
    private _conf;
    constructor(_filePath?: string);
    get value(): Record<string, Record<string, any>>;
    load(obj: Record<string, Record<string, any>>): void;
    readSync<T>(filePath?: string): this;
    static format<U = Record<string, Record<string, any>>>(obj: U): string;
    private _farmat;
    writeSync(filePath?: string): void;
    addSection<V extends Record<string, any>>(section: string, records: V): this;
    addRecord<V>(section: string, key: string, value: V): this;
    getSection(section?: string): Record<string, any>;
    get(section?: string, key?: string): any;
    private __str__;
    print(): this;
}

7.2 env 配日志文件读取器:getEnvs

import { getEnvs } from '@jcstdio/jc-utils'

该工具的类型签名为:

declare function getEnvs<T>(envFilePath: string, regExp?: RegExp, parse?: (right: string) => T): Record<string, T>;

8. 缓存工具

8.1 cookie 工具:Cookies

import { Cookies } from '@jcstdio/jc-utils'

let cookies = new Cookies();

Cookie 对象的类型签名为:

declare class Cookies {
    /**
     * 添加新的 cookie
     * @param name cookie 名称
     * @param value cookie 值
     * @param options cookie 选项
     */
    set(name: string, value: string, options?: {
        expires?: number;
        path?: string;
    }): void;
    /**
     * 获取指定名称的 cookie
     * @param name cookie 名称
     * @returns cookie 值
     */
    get(name: string): string | undefined;
    /**
     * 删除指定名称的 cookie
     * @param name cookie 名称
     */
    remove(name: string): void;
    /**删除所有的 cookie*/
    clear(): void;
    /**
     * 返回所有 cookie 键值对构成的 Map
     * @returns cookie 键值对构成的 Map
     */
    getMap(): Map<string, string>;
    /**
     * 返回指定 cookie 是否存在
     * @param name cookie 名称
     * @returns 是否存在
     */
    has(name: string): boolean;
    /**
     * 将指定 cookie 键值对写入 localStorage
     * @param name cookie 名称
     */
    copyToLocal(name: string): void;
    /**
     * 将指定 cookie 键值对写入 localStorage,并从 cookie 中删除
     * @param name cookie 名称
     */
    moveToLocal(name: string): void;
    /**
     * 从 localStorage 读取指定键值对,改写到 cookie,并从 localStorage  中删除
     * @param name cookie 名称
     */
    moveFromLocal(name: string): void;
    /**
     * 从 localStorage 读取指定键值对,改写到 cookie
     * @param name cookie 名称
     */
    copyFromLocal(name: string): void;
}

9. 拷贝工具

提供深拷贝、浅拷贝的相关函数。请参考以下例子使用:

import { copy } from '@jcstdio/jc-utils'

// 浅拷贝
const obj1 = {a: 1, b: {c: 2}};
const shallowCopyObj1 = copy.shallowCopy(obj1);
console.log(shallowCopyObj1); // {a: 1, b: {c: 2}}
console.log(shallowCopyObj1.b === obj1.b); // true

// 使用 deepCopy 方法深拷贝 (递归复制嵌套对象实现)
const obj2 = {a: 1, b: {c: 2}};
const deepCopyObj2 = copy.deepCopy(obj2);
console.log(deepCopyObj2); // {a: 1, b: {c: 2}}
console.log(deepCopyObj2.b === obj2.b); // false

// 使用 serializeCopy 方法深拷贝 (使用JSON序列化和反序列化实现)
const obj3 = {a: 1, b: {c: 2}};
const serializeCopyObj3 = copy.serializeCopy(obj3);
console.log(serializeCopyObj3); // {a: 1, b: {c: 2}}
console.log(serializeCopyObj3.b === obj3.b); // false

10. vite 相关工具

环境变量筛选:wrapperEnv

这个函数可以帮助你加载带有给定前缀的env值。

// vite.config.ts
import { wrapperEnv } from '@jcstdio/jc-utils'

const ENV_DIR = path.join(__dirname, "envs");

export default defineConfig(({ command, mode }) => {
  const env = loadEnv(mode, ENV_DIR, "");
  const viteEnv = wrapperEnv(env);
  console.log((`[vite config] viteEnv founded: ${JSON.stringify(viteEnv)}`));
  return {
    // vite configs
	// ...
  }
})

11. 数学计算相关工具

等差数列工具:arithmeticProgression

用于构造一个等差数列数组

import { arithmeticProgression } from '@jcstdio/jc-utils'

arithmeticProgression(1,9,3);    // [ 1, 3, 5, 7, 9 ]
arithmeticProgression(9,1,3);    // [ 9, 7, 5, 3, 1 ]
arithmeticProgression(-9,-1,3);  // [ -9, -7, -5, -3, -1 ]
arithmeticProgression(-1,-9,3);  // [ -1, -3, -5, -7, -9 ]
arithmeticProgression(-1,-9,0);  // [ -1, -9 ]
arithmeticProgression(1,1,3);    // [ 1, 1, 1, 1, 1 ]

等间隔序列生成器:range

该工具受启发于 Python 中提供的 range 函数。在本模块中,range 是一系列重载的序列生成器,返回一个数组。

range 工具的类型签名如下:

declare function range(x: number): number[];
declare function range(x: [number]): number[];
declare function range(x: [number, number]): number[];
declare function range(x: [number, number, number]): number[];

例如:

import { range } from '@jcstdio/jc-utils'

range([0, 3]);    // [0,1,2]
range(3);         // 相当于 range([0, 3]),[0,1,2]
range([3]);       // 相当于 range(3),   [0,1,2]
range([4, 8, 1]); // [4, 5, 6, 7], 其中最后一个数表示间隔
range([4, 8, 2]); // [4, 6]
range([4, 8]);    // 相当于 range([4, 8, 1]),[4, 5, 6, 7]

12. 正则与正则工具

这一部分的包含各种来源于以前写过的以及各种开源项目和网页上归纳出来的正则表达式,如果由其它常用的,可以邮件给我,我继续添加。

本节列出的正则工具,可以参考如下格式进行导入:

import { regIp } from '@jcstdio/jc-utils'

12.1 网络相关正则表达式

正则实例变量名描述
regIp匹配IP地址
regMac匹配MAC地址
regEmail匹配Email地址
regMacOrIp匹配MAC地址或IP地址
regUrl匹配网址URL的正则表达式
regIpv6匹配IPv6地址
regDomain匹配域名
regPort匹配端口号
regSubnetMask匹配子网掩码

12.2 字符格式相关正则表达式

正则实例变量名描述
regChinese匹配中文字符
regDoubleByte匹配双字节字符(包括汉字在内)
regTrim匹配首尾空白字符的正则表达式
regSpecialChar匹配特殊字符
regNumberAndLetter匹配数字和字母组合
regChineseEnglishNumberUnderline匹配中文、英文、数字和下划线
regChineseEnglishNumberSpace匹配中文、英文、数字和空格
regChineseEnglishNumberDash匹配中文、英文、数字和中划线
regChineseEnglishNumberSlash匹配中文、英文、数字和斜杠
regChineseEnglishNumberColon匹配中文、英文、数字和冒号
regChineseEnglishNumberQuestion匹配中文、英文、数字和问号
regChineseEnglishNumberExclamation匹配中文、英文、数字和感叹号
regChineseEnglishNumberUnderscore匹配中文、英文、数字及下划线
regChineseEnglishNumberUnderscoreLength匹配中文、英文、数字及下划线,且长度为2-18个字符
regChineseEnglishNumberUnderscore2匹配由数字、26个英文字母、中文或者下划线组成的字符串
regChineseEnglishNumberUnderscoreLength2匹配由数字、26个英文字母、中文或者下划线组成的字符串,且长度为2-18个字符
regChineseEnglishNumberUnderscoreLength3匹配由数字、26个英文字母、中文或者下划线组成的字符串,且长度为6-18个字符
regChineseEnglishNumberUnderscoreLength4匹配由数字、26个英文字母、中文或者下划线组成的字符串,且长度为8-16个字符
regChineseEnglishNumberUnderscoreLength5匹配由数字、26个英文字母、中文或者下划线组成的字符串,且长度为6-16个字符
regEnglishAlphabet匹配由26个英文字母组成的字符串
regUppercaseEnglishAlphabet匹配由26个大写英文字母组成的字符串
regLowercaseEnglishAlphabet匹配由26个小写英文字母组成的字符串
regAlphanumeric匹配由数字和26个英文字母组成的字符串
regUnderscore匹配由数字、26个英文字母或者下划线组成的字符串
regChineseEnglishNumber匹配由数字、26个英文字母或者中文组成的字符串

12.3 标签、各种文本相关正则表达式

正则实例变量名描述
regXmlTag匹配XML标签
regHtmlTag匹配HTML标记
regYaml匹配YAML格式的文本
regJson匹配JSON格式的文本

12.4 日期时间相关正则表达式

正则实例变量名描述
regDate匹配日期格式:yyyy-mm-dd
regTime匹配时间(hh:mm:ss)
regDateTime匹配日期时间格式:yyyy-mm-dd HH:MM:SS

12.5 数字相关正则表达式

正则实例变量名描述
regNumber匹配十进制数字
regNonNegativeInteger匹配十进制非负整数(正整数 + 0)
regPositiveInteger匹配十进制正整数
regNegativeInteger匹配十进制负整数
regNonPositiveInteger匹配十进制非正整数(负整数 + 0)
regInteger匹配十进制整数
regOctalNumber匹配表示八进制数的字符串
regDecimalNumber匹配表示十进制数的字符串
regHexadecimalNumber匹配表示十六进制数的字符串
regFloat匹配浮点数
regPositiveFloat匹配正浮点数
regNegativeFloat匹配负浮点数
regNonNegativeFloat匹配非负浮点数(正浮点数 + 0)
regNonPositiveFloat匹配非正浮点数(负浮点数 + 0)

12.6 颜色相关正则表达式

正则实例变量名描述
regHexColor匹配16进制颜色值
regRgbColor匹配RGB颜色值
regRgbaColor匹配RGBA颜色值
regHslColor匹配HSL颜色值
regHslaColor匹配HSLA颜色值

12.7 电话号码、邮编相关正则表达式

正则实例变量名描述
regTelephone匹配电话号码(支持带区号和不带区号)
regMainlandPhone匹配中国大陆手机号码(支持+86和86开头)
regMainlandTelephone匹配中国大陆固定电话号码
regMainlandTelecomPhone匹配中国大陆电信手机号码
regMainlandUnicomPhone匹配中国大陆联通手机号码
regMainlandMobilePhone匹配中国大陆移动手机号码
regPostalCode匹配中国邮政编码
regMainlandPostalCode匹配中国大陆邮政编码

12.8 互联网账号相关正则表达式

正则实例变量名描述
regQq匹配腾讯QQ号
regWechat匹配微信号
regWeiboUid匹配微博UID
regSinaWeibo匹配新浪微博账号
regBaidu匹配百度账号
regAlipay匹配支付宝账号
regTaobao匹配淘宝账号
regJd匹配京东账号
regSuning匹配苏宁账号
regVph匹配唯品会账号
regDangdang匹配当当账号
reg163Email匹配网易邮箱账号
regQqEmail匹配QQ邮箱账号
regSinaEmail匹配新浪邮箱账号
regAliyun匹配阿里云账号
regHuaweiCloud匹配华为云账号
regTencentCloud匹配腾讯云账号
regJdCloud匹配京东云账号
regAws匹配AWS账号
regAzure匹配Azure账号
regTwitter匹配Twitter账号
regFacebook匹配Facebook账号
regLinkedIn匹配LinkedIn账号
regGitHub匹配GitHub账号
regGitLab匹配GitLab账号
regBitbucket匹配Bitbucket账号
regDockerHub匹配Docker Hub账号
regGoogle匹配Google账号
regMicrosoft匹配Microsoft账号
regApple匹配Apple账号
regAmazon匹配Amazon账号
regNetflix匹配Netflix账号
regHulu匹配Hulu账号
regSpotify匹配Spotify账号
regTwitch匹配Twitch账号
regReddit匹配Reddit账号
regDiscord匹配Discord账号
regSlack匹配Slack账号
regZoom匹配Zoom账号
regInstagram匹配Instagram账号
regSnapchat匹配Snapchat账号
regPinterest匹配Pinterest账号
regTikTok匹配TikTok账号
regTelegram匹配Telegram账号
regWhatsApp匹配WhatsApp账号
regLine匹配Line账号
regViber匹配Viber账号
regSignal匹配Signal账号

12.9 证件号码相关正则表达式

正则实例变量名描述
regIdCard匹配中国大陆身份证号码1
regMainlandIdCard匹配中国大陆身份证号码2
regLicensePlate匹配车牌号码
regMainlandPassport匹配中国大陆护照号码
regMainlandLicensePlate匹配中国大陆车牌号码(新能源+非新能源)
regMainlandIdCard2匹配中国大陆身份证号码(18位,支持港澳台)
regMainlandHKMacaoPass匹配中国大陆港澳居民来往内地通行证
regMainlandTaiwanPass匹配中国大陆台湾居民来往大陆通行证
regMainlandOfficerRetireCard匹配中国大陆军官离退休证
regMainlandSocialSecurityCard匹配中国大陆社会保障卡
regMainlandOfficerCard匹配中国大陆军官证
regMainlandSoldierCard匹配中国大陆士兵证

12.10 工具函数:regTestAll

regTestAll 函数接收一组正则表达式和一个字符串。当所有的正则表达式都在该字符串上 test 成功时返回 ture,否则返回 false。该函数的类型签名为:

declare function regTestAll(regs: RegExp[], text: string, debug?: boolean): boolean;

12.10 工具函数:regTestAny

regTestAll 函数接收一组正则表达式和一个字符串。当任意一个正则表达式都在该字符串上 test 成功时返回 ture,全部test失败时返回 false。该函数的类型签名为:

declare function regTestAny(regs: RegExp[], text: string, debug?: boolean): boolean;

13. 数据容器工具

13.1 双链表容器: LinkedList 类

LinkedList 是一个使用 ListNode 类作为节点的 双链表,这两个类的类型签名为:

declare class ListNode<T> {
    value: T;
    next: ListNode<T> | null;
    prev: ListNode<T> | null;
    constructor(value: T);
}
declare class LinkedList<T> {
    private _head;
    private _tail;
    private _count;
    constructor(...params: T[]);
    /**获取头节点*/
    get head(): ListNode<T>;
    /**获取尾节点*/
    get tail(): ListNode<T>;
    /**链表的长度*/
    get length(): number;
   /**
    * 在链表尾部添加节点
    * @param value 节点的值
    */
    push(value: T): void;
    /**
   * append 的别名方法
   * @param value 节点的值
   */
    append(value: T): void;
    /**
   * 在链表头部添加节点
   * @param value 节点的值
   */
    pushLeft(value: T): void;
    /**
   * addpenLeft的别名方法
   * @param value 节点的值
   */
    appendLeft(value: T): void;
    /**
   * 删除链表尾部节点
   * @returns 被删除的节点的值
   */
    pop(): T | null;
    /**
   * 在链表头部添加节点
   * @param value 节点的值
   */
    unshift(value: T): void;
    /**
   * 清空链表
   */
    clear(): void;
    /**
   * 删除指定节点
   * @param node 要删除的节点
   * @returns 被删除的节点的值
   */
    remove(node: ListNode<T>): T | null;
    /**
   * 删除指定位置的节点
   * @param index 要删除的节点的位置
   * @returns 被删除的节点的值
   */
    drop(index: number): T | null;
    /**
   * 对该链表进行切片,返回新的 LinkedList
   * @param start 切片的起始元素索引(包含)
   * @param end 切片的结束元素索引(不包含)
   */
    slice(start: number, end: number): LinkedList<T>;
    /**
   * 如果LinkedList元素都为 number 时,用于与另外一个 LinkedList 元素对应相加,得到新的LinkedList返回。
   * 如果 LinkedList 元素都为 string 时,则返回对应字符串元素拼接组成的新LinkedList
   * @param list 要相加或拼接对应元素的 LinkedList
   * @returns 相加或拼接对应元素后的新 LinkedList
   */
    add(list: LinkedList<T>): LinkedList<T>;
    /**
   * 获取指定位置的节点的值
   * @param index 节点的位置
   * @returns 节点的值
   */
    get(index: number): T | null;
    /**
   * 判断链表中是否包含指定的值
   * @param value 要查找的值
   * @returns 是否包含指定的值
   */
    includes(value: T): boolean;
    /**
   * includes 的别名方法
   * @param value 要查找的值
   * @returns 是否包含指定的值
   */
    contains(value: T): boolean;
    /**
   * 过滤链表中的节点
   * @param callback 过滤函数
   * @returns 过滤后的链表
   */
    filter(callback: (value: T) => boolean): LinkedList<T>;
    /**
   * 映射链表中的节点
   * @param callback 映射函数
   * @returns 映射后的链表
   */
    map<U>(callback: (value: T) => U): LinkedList<U>;
    private _quickSort;
    /**
   * 对链表进行快速排序
   */
    sort(): void;
    /**
   * 对链表元素进行反转
   */
    reverse(): void;
}

List 类

基于该 双端链表封装了一个 列表类 List。其类型签名如下:

declare class List<T> {
    private _list;
    constructor(...params: T[]);
    get value(): LinkedList<T>;
    set value(list: LinkedList<T>);
   /**
     * 在列表尾部添加元素
     * @param value 元素的值
     */
    push(value: T): void;
    /**
     * 在内部,如果LinkedList元素都为 number 时,用于与另外一个 LinkedList 元素对应相加,得到新的LinkedList返回。 如果 LinkedList 元素都为 string 时,则返回对应字符串元素拼接组成的新LinkedList
     */
    add(value: LinkedList<T>): void;
    /**
     * append的别名方法
     * @param value 元素的值
     */
    append(value: T): void;
    /**
     * 在列表头部添加元素
     * @param value 元素的值
     */
    unshift(value: T): void;
    /**
     * addpenLeft的别名方法
     * @param value 元素的值
     */
    appendLeft(value: T): void;
    /**
     * 删除列表尾部元素
     * @returns 被删除的元素的值
     */
    pop(): T | null;
    /**
     * 清空列表
     */
    clear(): void;
    /**
     * 删除指定位置的元素
     * @param index 要删除的元素的位置
     * @returns 被删除的元素的值
     */
    remove(index: number): T | null;
    /**
     * 获取指定位置的元素的值
     * @param index 元素的位置
     * @returns 元素的值
     */
    get(index: number): T | null;
    /**
     * 判断列表中是否包含指定的值
     * @param value 要查找的值
     * @returns 是否包含指定的值
     */
    includes(value: T): boolean;
    /**
     * contains的别名方法
     * @param value 要查找的值
     * @returns 是否包含指定的值
     */
    contains(value: T): boolean;
    /**
     * 过滤列表中的元素
     * @param callback 过滤函数
     * @returns 过滤后的列表
     */
    filter(callback: (value: T) => boolean): List<T>;
    /**
     * 映射列表中的元素
     * @param callback 映射函数
     * @returns 映射后的列表
     */
    map<U>(callback: (value: T) => U): List<U>;
    /**
     * 获取指定范围内的元素组成的新列表
     * @param start 起始位置(包含)
     * @param end 结束位置(不包含)
     * @returns 新列表
     */
    slice(start: number, end: number): List<T>;
    /**
     * 纯基于整数位置的索引,用于按位置选择。
     * @param index 元素的位置
     * @returns 元素的值
     */
    iloc(index: number): T | null;
    /**
     * 所有元素为number时,用于求和,所有元素为string时用于字符串拼接
     * @returns 求和或字符串拼接的结果
     */
    sum(): number | string;
    /**
     * 所有元素为number时返回最小值
     * @returns 最小值
     */
    min(): number | null;
    /**
     * 所有元素为number时返回最大值
     * @returns 最大值
     */
    max(): number | null;
    /**
     * 所有元素为number时返回平均值
     * @returns 平均值
     */
    mean(): number | null;
    /**
     * 所有元素为number时返回样本标准差
     * @returns 样本标准差
     */
    std(): number | null;
    /**
     * 所有元素为number时返回无偏方差
     * @returns 无偏方差
     */
    var(): number | null;
    /**
     * 所有元素为number时返回所有该LinkedList元素绝对值构成的新LinkedList
     * @returns 所有元素绝对值构成的新LinkedList
     */
    abs(): List<number>;
    /**
     * 就地排序
     */
    sort(): void;
    /**
     * 列表的长度
     */
    get length(): number;
    /**
     * 列表的长度
     * - length 的同名 Getter.
     */
    get size(): number;
    /**
     * 实现该类的迭代器
     */
    [Symbol.iterator](): Iterator<T>;
}

13.2 一个受 pandas、danfojs 启发的序列:Series 类

declare class Series {
    private _data;
    private _index;
    private columns;
    private dtypes;
    constructor(data: any[], options?: {
        columns?: any[];
        dtypes?: any[];
        index?: any[];
    });
    get shape(): number[];
    get size(): number;
    get data(): any[];
    /**返回序列和其他元素的加法(二元运算符add)*/
    add(other: Series, options?: any): Series;
    /**返回 Series 和其他元素的减法(二元运算符sub)*/
    sub(other: Series, options?: any): Series;
    /**返回 Series 和其他元素的乘法运算(二元运算符mul)*/
    mul(other: Series, options?: any): Series;
    /**返回 Series 和其他元素的浮点除法(二元运算符truediv)*/
    div(other: Series, options?: any): Series;
    /**返回 Series 和其他元素的模(二元运算符mod)*/
    mod(other: Series, options?: any): Series;
    /**返回级数和其他元素的指数幂(二元运算符pow)*/
    pow(other: Series, options?: any): Series;
    /**舍入 Series 中的浮点值*/
    round(dp: number, options?: any): Series;
    /**检查 Series 中的所有值是否都小于某个值*/
    lt(other: any, options?: any): boolean;
    /**返回 Series 和其他元素的大于(二元运算符gt)*/
    gt(other: Series, options?: any): Series;
    /**按元素返回小于或等于of的 Series 和other(二元运算符le)*/
    le(other: Series, options?: any): Series;
    /**检查 Series 中的所有值是否都大于或等于某个值*/
    ge(other: any, options?: any): boolean;
    /**返回不等于系列和其他元素的值(二元运算符ne)*/
    ne(other: Series, options?: any): Series;
    /**返回等于系列和其他元素的值(二元运算符eq)*/
    eq(other: Series, options?: any): Series;
    /**对Series中的每个值调用函数*/
    apply(callable: Function, options?: any): Series;
    /**将Series的值映射到函数或对象*/
    map(callable: Function): Series;
    /**返回删除了缺失值的新Series*/
    dropNa(options?: any): Series;
    /**使用指定的方法填充NaN值*/
    fillNa(options?: any): Series;
    /**检测缺失值*/
    isNa(): boolean;
    /**替换值*/
    replace(oldValue: any, newValue: any, options?: any): Series;
    /**返回Series和其他Series之间的逻辑或*/
    or(other: Series): Series;
    /**返回Series和其他Series之间的逻辑与*/
    and(other: Series): Series;
    /**返回对Series值进行排序的整数索引*/
    argSort(options?: any): any[];
    /**返回 Series 中最小值的位置*/
    argMin(): number;
    /**返回 Series 中最大值的位置*/
    argMax(options?: any): number;
    /**按值排序*/
    sortValues(options?: any): Series;
    /**
    将系列打印到控制台。
    注意:这个方法的实现还有些问题,待之后想办法改改。
    */
    print(...params: any[]): void;
}

14.杂项

14.1 对应于 Omit<T, K> 类型工具 的 omit 函数

TypeScript 中提供了一个内置的类型工具 Omit<T, K>
(这里推荐阅读我的另外一篇博客《小结:近五十个常用 TypeScript类型工具 的声明、描述、用法示例》)

type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;

如:

interface User {
  name: string;
  age: number;
  email: string;
}

type UserWithoutEmail = Omit<User, 'email'>;

其中的 UserWithoutEmail 相当于:

{
  name: string;
  age: number;
}

也就是当我们从一个类型构造另外一个类型时,排除了某个属性。在 @jcstdio/jc-utils 模块中提供了一个对应于该类型工具的 omit 函数可以直接拿来用.该工具的类型签名如下:

declare function omit<T, K extends keyof T>(obj: T, key: K): Omit<T, K>;

14.2 空操作:noop、pass

这两个函数的类型签名为:

declare const noop: (...params: any) => void;
declare const pass: (param?: string) => void;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/482500.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【微服务 | 学成在线】项目易错重难点分析(媒资管理模块篇·上)

文章目录 模块整体认识架构问题分析nacos配置管理搭建nacos公用配置配置优先级网关搭建 分布式文件系统什么是分布式文件系统MinIO数据恢复测试SDK 上传图片http请求头中的content-typeRequestPart接口分析Service层的优化 上传视频断点续传技术java代码模拟分块与合并上传视频…

BFD场景作用及缺省配置

一、BFD缺省配置 表&#xff1a;BFD参数缺省值 二、BFD场景作用 表&#xff1a;BFD场景作用 三、BFD配置缺省参数汇总 1&#xff09;配置BFD单跳检测 图&#xff1a;BFD单跳检测配置流程图 执行命令bfd&#xff0c;使能全局BFD功能并进入BFD视图。缺省情况下&#xff0c;全…

30天、2000公里、400亿,“长沙国际工程机械展”竖起世界展会新地标

文|智能相对论 作者|佘凯文 2021年4月的一天&#xff0c;一台重达120吨的日立建机超大型液压挖掘机在日本的某港口装载完成&#xff0c;或许绝大多人对120吨没有概念&#xff0c;给大家解释下&#xff0c;一吨等于2000斤&#xff0c;120吨就是240000斤。金箍棒知道吧&#xf…

RocketMQ学习1

1、RocketMQ快速入门 RocketMQ是阿里巴巴2016年MQ中间件&#xff0c;使用Java语言开发&#xff0c;在阿里内部&#xff0c;RocketMQ承接了例如“双11”等高并发场景的消息流转&#xff0c;能够处理万亿级别的消息。 1.1 准备工作 1.1.1 下载RocketMQ RocketMQ最新版本&#xff…

【垃圾回收器】基于Go实现引用计数法(ReferenceCount)

不想传火的&#xff0c;可以点击下面的链接&#xff01; github:GCByGO 给我点赞嘛&#xff0c;球球了&#xff01; What This? 现象 引用计数法是一种垃圾回收算法&#xff0c;用于跟踪对象被引用的次数。在该算法中&#xff0c;每个对象都会维护一个计数器&#xff0c…

PyTorch:深度学习框架的优雅演进与设计理念

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

【Linux】文件与路径

一、Linux相关软件 xftp&#xff1a;用来传文件 xshell&#xff1a;用来敲命令 二、Linux的文件结构 windows系统下设有盘符&#xff1a;如C盘、D盘等&#xff0c;Linux没有盘符的概念&#xff0c;只有一个根目录/&#xff0c;所有文件都在它下面。 在根目录下输入命令ls&am…

PHP 入门学习笔记

现在如果问什么行业最火&#xff0c;很多人第一反应肯定就是IT。的确&#xff0c;这些年随着互联网的不断发展&#xff0c;IT热门众所周知。那么就一起来说说&#xff0c;IT行业里&#xff0c;哪些技术更热门。 一、PHP技术&#xff1a; PHP 是一种创建动态交互性站点的强有力…

2. C 语言基础

2. C 语言基础 常考面试题 int main(int argc, char ** argv)函数中&#xff0c;参数argc和argv分别代表什么意思&#xff1f;⭐⭐⭐⭐ 第一个参数&#xff0c;int型的argc&#xff0c;为整型&#xff0c;用来统计程序运行时发送给main函数的命令行参数的个数。 第二个参数&am…

深度遍历模版与广度遍历模版

深度优先遍历 //void dfs(中间容器&#xff0c;数据) //{ // if(临界走到末尾) // { // 中间容器加到最终容器 // return&#xff1b; // } // for(做选择) // { // 改变中间容器 // dfs(中间容器&#xff0c;数据) // 撤回…

Linux下编译MySQL++/mysqlpp

一、简介 MySQL&#xff08;又名mysqlpp&#xff09;是对MySQL和MariaDB C api的c封装。它建立在与标准c库相同的规范之上&#xff0c;使得处理数据库与处理std容器一样简单。MySQL还提供了一些功能&#xff0c;使用户可以在自己的代码中避免最重复的SQL排序&#xff0c;为这些…

springboot 整合rabbitMq保证消息一致性方案

rabbitMq介绍 RabbitMQ是一种开源的消息代理软件&#xff0c;它实现了高级消息队列协议&#xff08;AMQP&#xff09;标准&#xff0c;可用于在应用程序之间传递消息。RabbitMQ最初由LShift开发&#xff0c;现在由Pivotal Software维护。 RabbitMQ可以在多个平台上运行&#x…

计算机网络笔记:TCP协议 和UDP协议(传输层)

TCP 和 UDP都是传输层协议&#xff0c;他们都属于TCP/IP协议族。 TCP 基本概念 TCP的全称是传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP 是面向连接的、可靠的流协议&#xff08;流就是指不间断的数据结构&#xff09; TCP报文格式 TCP报文是…

图神经网络:在Cora上动手实现图神经网络

文章说明&#xff1a; 1)参考资料&#xff1a;PYG官方文档。超链。 2)博主水平不高&#xff0c;如有错误还望批评指正。 3)我在百度网盘上传了这篇文章的jupyter notebook。超链。提取码8888。 文章目录 代码实操1&#xff1a;GCN的复杂实现代码实操2&#xff1a;GCN的简单实现…

C++语言练习题位运算

位运算(01)基础 位运算(02)从一个 16 位的单元中取出某几位 题目描述 从一个 16 位的单元中取出某几位&#xff08;即该几位保留原值&#xff0c;其余位为 0. 使用 value 存放该 16 位的数&#xff0c;n1 为欲取出的起始位&#xff0c;n2 为欲取出的结束位。&#xff…

thinkphp6 JWT报错 ‘“kid“ empty, unable to lookup correct key‘解决办法

文章目录 JWT简介安装问题先前的代码解决办法修改后的完整代码 JWT简介 JWT全称为Json Web Token&#xff0c;是一种用于在网络应用之间传递信息的简洁、安全的方式。JWT标准定义了一种简洁的、自包含的方法用于通信双方之间以JSON对象的形式安全的传递信息。由于它的简洁性、可…

[论文笔记] In Search of an Understandable Consensus Algorithm (Extended Version)

In Search of an Understandable Consensus Algorithm (Extended Version) 寻找可理解的共识算法 (扩展版) [Extended Paper] [Original Paper] ATC’14 (Original) 摘要 Raft 是一个用于管理复制日志的共识算法. Raft 更易于理解, 且为构建实际的系统提供了更好的基础. Raf…

apache hive release notes

hive release notes位置 https://github.com/apache/hive/blob/master/RELEASE_NOTES.txt 如何查看不同版本的release note

计算机是如何工作的

一、冯诺依曼体系&#xff1a; CPU中央处理器&#xff08;运算器控制器&#xff09;&#xff1a;CPU是计算机最核心的部分&#xff0c;进行算数运算和逻辑判断。CPU最重要的指标是“主频”&#xff0c;如&#xff1a;2.5Ghz&#xff0c;描述了CPU的运算速度&#xff0c;可以近…

【React】redux和React-redux

&#x1f380;个人主页&#xff1a;努力学习前端知识的小羊 感谢你们的支持&#xff1a;收藏&#x1f384; 点赞&#x1f36c; 加关注&#x1fa90; Redux和React-redux reduxredux的使用Redux的工作流Redux APIstoreactionreducerstore.dispatch()redux的方法使用 React-Redux…