js&ts 常用工具函数

2023-11-09

JavaScript & TypeScript

常用工具函数 (Utils)

  • RGB转换
export const rgbToHex: (r: number, g: number, b: number) => string =
    (r, g, b) => "#" + (1 << 24 | r << 16 | g << 8 | b).toString(16).slice(1);

export const hexToRGB: (hex: string) => [number, number, number] = hex => {
    const res = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
    return res ? res.slice(1).map(s => parseInt(s, 16)) as [number, number, number] : [0, 0, 0];
}
  • 集合操作
export const union: <T>(a: T[], b: T[]) => T[] = (a, b) => [...a, ...b.filter(v => !a.includes(v))];
export const intersection: <T>(a: T[], b: T[]) => T[] = (a, b) => a.filter(v => b.includes(v));
export const diff: <T>(a: T[], b: T[]) => T[] = (a, b) => [...a, ...b].filter(v => !a.includes(v) || !b.includes(v));
  • 数组
export const shuffle: <T>(a: T[]) => T[] = a => {
    const ans = [];
    while (a.length > 0) {
        const random = Math.floor(Math.random() * a.length);
        ans.push(a[random]);
        a.splice(random, 1);
    }
    return ans;
}

export const set: <T>(a: T[]) => T[] = a => [...new Set(a)];

export const max: (a: number[]) => number = a => Math.max(...a);
export const min: (a: number[]) => number = a => Math.min(...a);
export const max_min: (a: number[]) => [number, number] = a => 
    a.reduce((pre, v) => [pre[0], pre[1]] = [Math.max(pre[0], v), Math.min(pre[1], v)], [a[0], a[0]]);

export const countOf: <T>(a: T[], v: T) => number = (a, v) => a.reduce((count, val) => count + (val === v ? 1 : 0), 0);

export const head: <T>(a: T[]) => T = a => a[0];
export const tail: <T>(a: T[]) => T = a => a[a.length - 1];
  • 校验

邮箱验证最好方式是与邮箱进行邮件验证!正则验证最好只用于用户书写错误提醒

export const validateEmail: (s: string) => boolean = s => /\S+@\S+/.test(s);

手机号验证最好方式为发送严重码!正则验证最好只用于用户书写错误提醒

export const validatePhone: (s: string) => boolean = s => /^1[0-9]{10}$/.test(s);

验证只包含数字

export function onlyNum(str: string): boolean {
    return /^\d+$/.test(str);
}

验证只包含字母,数字和基本汉字

export function onlyLettersAndNumAndChinese(str: string): boolean {
    return /^[a-zA-Z0-9\u4e00-\u9fa5]+$/u.test(str);
}

汉字占两位,字母占一位(默认传入字符串只包含字母和汉字)

export function worldCount(str: string): number {
    let count = 0;
    for (const s of str) {
        count += s.codePointAt(0)! < 255 ? 1 : 2;
    }
    return count;
}
  • 其它
export const digitize: (n: number) => number[] = n => [...n.toString()].map(i => parseInt(i));
export const random: (min: number, max: number) => number = (min, max) => Math.floor(min + Math.random() * (max - min));

同Python range

export function* range(start: number, stop?: number, step: number = 1) {
    if (step === 0) {
        throw new Error('ValueError');
    }
    let last: number = stop ?? 0;
    if (stop === undefined) {
        last = start;
        start = 0;
    }
    const compare = step > 0 ? ((i: number) => i < last) : ((i: number) => i > last);
    for (let i = start; compare(i); i += step) {
        yield i;
    }
}

同 C# string format

export function format(str: string, ...args: any[]): string {
    args.forEach((arg, index) => {
        const re = new RegExp(`\\{\\s*${index}\\s*\\}`, 'g');
        str = str.replace(re, arg?.toString());
    });
    return str;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

js&ts 常用工具函数 的相关文章

  • socket.io 的良好初学者教程? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • JavaScript 中的埃拉托斯特尼筛法对大量数据无限运行

    我一直在尝试写埃拉托斯特尼筛法 http en wikipedia org wiki Sieve of EratosthenesJavaScript 中的算法 基本上我只是按照以下步骤操作 创建从 2 到 n 1 的连续整数列表 令第一个素
  • 为什么我的淘汰单选按钮在另一个具有点击绑定的元素内时会失败?

    我有一个单选按钮列表 我想要点击 li 他们还检查单选按钮 这一切都有效 直到我放了一个name单选元素上的属性 然后我的代码停止工作 我的代码如下所示 ul li li ul li
  • 如何在react-bootstrap中禁用表单提交的

    在下面的代码片段中 我有许多文本类型的输入表单 如果用户点击 我似乎会得到相同的合成事件 就像他们按下提交按钮一样 我想忽略作为表单提交 只允许一个人按下 提交 按钮 我删除了一些表单组以减少示例 在所有情况下 按钮或 ENTER 键 e
  • Chrome 中的性能问题

    我目前正在从事一个相对较大的项目 使用 AngularJs 构建 应用程序的一部分是一个表单 您可以向其中添加任意数量的页面 不幸的是 添加了很多不必要的垃圾 即表示表单模型的对象可能会变得非常大 在某些时候 Chrome 基本上无法处理它
  • Angular 2 和 TypeScript 的承诺

    我正在尝试使用routerCanDeactivate我的应用程序中的组件的函数 简单的使用方法如下 routerCanDeactivate return confirm Are you sure you want to leave this
  • 引导程序提前输入未填充承诺的响应

    我的引导程序预输入如下
  • 隐藏 Div 的父级

    我只是想隐藏父divcomments section div class content content green div div div 我试过这个 document getElementById comments section pa
  • 有没有办法使用 Rspec/Capybara/Selenium 将 javascript console.errors 打印到终端?

    当我运行 rspec 时 是否可以让 capybara selenium 向 rspec 报告任何 javascript console errors 和其他异常 我有一大堆测试失败 但当我手动测试它时 我的应用程序正在运行 如果不知道仅在
  • 将 UMD Javascript 模块导入浏览器

    你好 我正在对 RxJS 进行一些研究 我可以通过在浏览器中引用它来使用该库 如下所示 它使用全局对象命名空间变量 Rx 导入 我可以制作可观察的东西并做所有有趣的事情 当我将 src 更改为指向最新的 UMD 文件时 一切都会崩溃 如下所
  • 从数据库检查数据的异步解决方案各种循环子句

    我想要做的是异步检查数据库并从中获取结果 在我的应用程序中我试图实现Asynchronously将此步骤解决为 从数据库中检查手机号码JsonArray循环子句的种类 Create JsonArray从结果 打印创建的数组 我学到了足够多的
  • 日期出现奇怪的错误,“未捕获非法访问”

    所以我试图找到最新的DateJavascript 可以处理 我把它减少到 9 月 275760 并增加了我开始捕获未捕获的天数illegal access例外new Date 09 24 275760 to new Date 10 13 2
  • Vue 和 Vuex:处理依赖的计算属性

    我的应用程序是一个使用 Vuex 在 Vue 中构建的精简电子表格 关键组件是TableCollection Table and Row The TableCollection有一个包含多个的数组Table对象 每个Table有一个包含多个
  • 对于只触及我的工作表的 Google 表格脚本,收到“此应用程序未经验证”

    我正在编写一个 Google Sheets 脚本 我只想访问与 gs 文件关联的同一电子表格中的数据 似乎我应该有权在自己的电子表格中运行脚本 但是每当我运行一个函数时 我都会得到一个This app isn t verified信息 我该
  • 如何使用 crypto-js 解密 AES ECB

    我正在尝试将加密数据从 flash 客户端 发送到服务器端的 javascript 在 asp 中作为 jscript 运行 有几个 javascript Aes 库 但它们实际上没有文档记录 我正在尝试使用 crypto js 但无法让代
  • 在 JavaScript 循环之外声明变量可以提高速度和内存?

    C 也有类似的问题 但我们没有看到 JavaScript 的任何问题 在循环内声明变量是否可以接受 假设循环有 200 次迭代 使用样本 2 相对于样本 1 是否有性能要求 内存和速度 我们使用 jQuery 来循环 它提高了我们将 var
  • Javascript Replace() 和 $1 问题

    我正在尝试创建一个脚本来搜索文本中的模式并在它找到的字符串周围包裹一个标签 shop attributes td each function this html function i html return html replace E 0
  • 从 FileReader 设置背景图像样式

    我正在寻找一种解决方案 允许我从文件上传输入中获取文件并通过设置 document body style backgroundImage 来预览它 以下代码用于在 Image 元素中显示预览 function setImage id tar
  • 如何在执行新操作时取消先前操作的执行?

    我有一个动作创建器 它会进行昂贵的计算 并在每次用户输入内容时调度一个动作 基本上是实时更新 但是 如果用户输入多个内容 我不希望之前昂贵的计算完全运行 理想情况下 我希望能够取消执行先前的计算并只执行当前的计算 没有内置功能可以取消Pro
  • 如何在react-highcharts中使用图表工具提示格式化程序?

    如何使用图表工具提示格式化程序 我正在使用高图表的反应包装器 我有这样的配置 const CHART CONFIG tooltip formatter tooltip gt var s b this x b each this points

随机推荐

  • 书单(含资源链接,快撸!)

    撸资源 笨办法 学Python 第3版 https www jianshu com p 67a4827e88a1 Python 编写高质量Python代码的59个有效方法 https pan baidu com s 1vAw1R9bP5EC
  • 计算机视觉毕业后找不到工作怎么办?

    点击上方 视学算法 选择加 星标 置顶 重磅干货 第一时间送达 编辑 Amusi 来源 知乎 https www zhihu com question 335451320 本文仅作为学术分享 如果侵权 会删文处理 计算机视觉毕业后找不到工作
  • 使用tf-slim的ResNet V1 152和ResNet V2 152预训练模型进行图像分类

    本文使用tf slim的ResNet V1 152和ResNet V2 152预训练模型进行图像分类 并研究slim网络的scope命名等 tf slim文档不太多 实现过程中多参考官网的源码 https github com tensor
  • 静态代码扫描工具—— TScanCode

    一 简介 TscanCode支持以下类型规则扫描 空指针检查 包含可疑的空指针 数据越界 内存泄漏 分配和释放不匹配 逻辑错误 重复的代码分支 bool类型和INT进行比较 表达式永远True或者false等共18类检查 可疑代码检查 if
  • C语言 数据结构 栈的线性实现 基本操作代码

    typedef struct DataType data MaxSize int top LinearStack 初始化 void initStack LinearStack stack stack top 1 void isEmpty L
  • 消除游戏——蓝桥杯2022年第十三届省赛真题

    题目描述 在一个字符串 S 中 如果 S i S i 1 且S i 不等于S i 1 则称 S i 和 S i 1 为边缘字符 如果S i 不等于S i 1且 S i S i 1 则 S i 1 和 S i 也称为边缘字符 其它的字符都不是
  • tp5.1 查询字段为空的数据

    tp 语句直接查询空字段数据 gt where 字段名 null 查询为NULL时的条件 gt where 字段名 not null 查询不是NULL时的条件 官方文档提供了更加简洁的使用方式 推荐的方式是使用whereNull和where
  • 快速跑 nerf instant-ngp 快速调试与配置,跑自己的数据

    1 下载Anaconda3 2 打开Anaconda Prompt Anaconda 创建虚拟环境 conda create n nerf ngp python 3 8 切换到虚拟环境 conda activate nerf ngp 安装相
  • 2021年CNVD漏洞挖掘经验

    一 关于证书获取条件 先看一下CNVD的官方解释 归档漏洞的证书颁发条件为 1 对于中危及中危以上通用型漏洞 CVSS2 0基准评分超过4 0分 除小厂商的产品 非重要APP 黑盒测试案例不满10起等不颁发证书 2 涉及电信行业单位 中国移
  • js的三目运算写法

    1 什么是三目运算 布尔表达式 值0 值1 注意 三目运算和if else 的 区别是三目运算有返回值 例如 var max a gt b a b 2 多条件的三目运算怎么写 实例 根据学生成绩判定ABCD四个等级 var result s
  • Python3学习实战——用类实现简单的猜拳游戏

    Python3学习实战 用类实现简单的猜拳游戏 前言 本笔记仅个人认知和见解 水平有限 还请见谅 如有错误 还请指出 若有想法 欢迎共享 内容不代表最优解决方案 甚至可能不是很好的方法 仅供参考 文章目录 Python3学习实战 用类实现简
  • Ubuntu 20.04 LTS系统下安装STM32CubeProgrammer

    前言 软件环境 一 软件下载 STM32CubeProg STM32CubeProgrammer software for all STM32 STMicroelectronics 二 iso格式转换 制作软件 https etcher b
  • 用Xshell连接服务器失败:Could not connect to ‘192.xx.xx.xx‘ (port 22): Connection failed.

    问题描述 本来一直都连接正常 突然有一天连不上了 脸直接吓白了 本来就好多bug 现在直接服务器都连不上了 成年人的崩溃就在一瞬间 doge 解决方法 提示 仅适用于之前连接正常 突然连不上的情况 如果是这种情况的尽量不要按照网上的教程乱改
  • bat日期时间字符串的格式化处理

    bat日期时间字符串的格式化处理 一 时间 日期 二 字符串处理 一 时间 日期 Windows在批处理中显示的时间和日期格式如下 echo date 2023 05 25 周四 echo time 12 44 27 45 二 字符串处理
  • 【算法】 丑数 2,3,5。求第n个丑数

    因子中仅仅包含2 3 5的数 称为丑数 比如说14 就不是丑数 因为因子包含7 请输出所有丑数中的第n个丑数 include
  • ADNI数据集-数据分析11.17

    1 RID 是 Relative IDentifier 的英文缩写 相对标识符的意思 https www aoetc com 172960 html 2 ADNI1和ADNI2是医学研究上经常使用的数据集 ADNI数据集介绍 仅用于个人纪录
  • 应用在k8s上运行的几种网络模式

    k8s deployment service默认配置 应用部署在k8s上 首先想到的是应用k8s的默认service模式配置 应用通过service向集群内部 ClusterIP 和集群外部 NodePort 暴露服务 k8s中的其他应用通
  • linux系统一些网络配置文件

    etc hosts文件 etc hosts文件的作用是主机名映射到相应的主机IP地址 可以使用任意文本编辑器编辑 etc hosts 文件 如果系统中不存在 etc hosts 文件 请将 usr newconfig etc hosts 复
  • Elasticsearch 8.0 installation

    after creating an enrollment token on your existing cluster You can complete the following actions at any time Reset the
  • js&ts 常用工具函数

    JavaScript TypeScript 常用工具函数 Utils RGB转换 export const rgbToHex r number g number b number gt string r g b gt 1 lt lt 24