首页 > 其他分享 >8个常用的辅助函数!!

8个常用的辅助函数!!

时间:2024-06-16 23:57:15浏览次数:17  
标签:常用 const 函数 辅助 console 字符串 obj log

在开发各种项目时,我们会发现经常需要一些辅助函数来帮助我们实现一些需求,并且这些函数是在很多项目里都可以进行复用的。下面我就列出我们一些常用的辅助函数,来帮助大家在开发项目时,进行复用。

1. 首字母大写

将字符串的第一个字母大写,其余部分转换为小写。

// 该函数接受一个可选的字符串参数 word
export const capitalizeFirstLetter = (word?: string) => {
  // 如果传入了字符串 word,则将其第一个字符转换为大写,并将其余字符转换为小写
  return word ? word.charAt(0).toUpperCase() + word.toLocaleLowerCase().slice(1) : '';
  // 如果未传入字符串,则返回空字符串
};

使用示例:

const formattedName = capitalizeFirstLetter('johN dOE');
// 将 'johN dOE' 转换为 'John doe'
console.log(formattedName); // 输出:John doe

2. 格式化日期

此函数使用 moment 库来格式化日期,使用前需要我们安装moment库。它可以根据 isTime 标志将日期格式化为 DD/MM/YYYY 或 HH A,可以根据我们的需求输出不同的时间格式。

npm install moment
// 导入 moment 库
import moment from 'moment';

// 该函数接受一个日期字符串 date 和一个布尔值 isTime
export const formatDate = (date: string, isTime = false) => {
  // 如果未传入日期字符串,则返回空字符串
  if (!date) return '';

  // 使用 moment 解析日期字符串
  const parsedDate = moment(date);

  // 如果 isTime 为 true,则格式化为 HH:mm A,否则格式化为 DD/MM/YYYY
  if (isTime) return parsedDate.format('HH:mm A');

  return parsedDate.format('DD/MM/YYYY');
};

使用示例:

const dateString = '2024-06-10T18:30:00';
const formattedDate = formatDate(dateString);
// 将日期 '2024-06-10T18:30:00' 格式化为 '10/06/2024'
console.log(formattedDate); // 输出:10/06/2024

const formattedTime = formatDate(dateString, true);
// 将日期 '2024-06-10T18:30:00' 格式化为 '06:30 PM'
console.log(formattedTime); // 输出:06:30 PM

3. 缩略文段

但我们遇到需要将文字段落进行缩短,缩短到指定的长度并附加省略号 (…)时,就可以使用下面这个函数。

// 该函数接受一个字符串 text 和一个数字 maxLength
export const truncateText = (text: string, maxLength: number) => {
  // 如果字符串长度小于或等于最大长度,则返回原字符串
  if (text.length <= maxLength) return text;

  // 否则截取字符串的前 maxLength 个字符,并添加省略号
  return text.substring(0, maxLength) + '...';
};

使用示例:

const longText = 'This is a long text that needs to be truncated.';
const truncatedText = truncateText(longText, 10);
// 将文本 'This is a long text that needs to be truncated.' 截断为 'This is a...'
console.log(truncatedText); // 输出:This is a...

4. 检查字符串是否包含字符类型

但当我们遇到需要检查字符串是否包含至少一个大写字母、一个小写字母、一个数字或一个特殊字符的需求时就可以使用下面这个函数。在校验密码最常见也最多用。

// 该函数接受一个字符串 val
export const containsAtleastOneUpperCase = (val: string) => /(?=.*?[A-Z])/.test(val);
// 使用正则表达式检查字符串是否包含至少一个大写字母

// 定义一个函数 containsAtleastOneLowerCase,该函数接受一个字符串 val
export const containsAtleastOneLowerCase = (val: string) => val ? /(?=.*?[a-z])/.test(val) : false;
// 使用正则表达式检查字符串是否包含至少一个小写字母

// 定义一个函数 containsAtleastOneNumber,该函数接受一个字符串 val
export const containsAtleastOneNumber = (val: string) => /(?=.*[0-9])/.test(val);
// 使用正则表达式检查字符串是否包含至少一个数字

// 定义一个函数 containsAtLeastOneSpecialChar,该函数接受一个字符串 val
export const containsAtLeastOneSpecialChar = (val: string) => /(?=.*[$&+,:;=?@#|'<>.^*_()%!-])/.test(val);
// 使用正则表达式检查字符串是否包含至少一个特殊字符

使用示例:

const password = 'Pa$$w0rd!';
const hasUpperCase = containsAtleastOneUpperCase(password);
const hasLowerCase = containsAtleastOneLowerCase(password);
const hasNumber = containsAtleastOneNumber(password);
const hasSpecialChar = containsAtLeastOneSpecialChar(password);

console.log(`Has upper case: ${hasUpperCase}`); // 输出:true
console.log(`Has lower case: ${hasLowerCase}`); // 输出:true
console.log(`Has number: ${hasNumber}`); // 输出:true
console.log(`Has special char: ${hasSpecialChar}`); // 输出:true

5. 检查数字奇偶性

当我们需要对数据中的奇数组和偶数组进行区分处理的时候就可以使用这个函数了。

// 定义一个函数 isEven,该函数接受一个数字 number
export const isEven = (number: number) => (number % 2 === 0);
// 返回该数字是否为偶数

6. 检查非空对象

当我们需要检查对象是否非空时,我们就可以使用下面这个函数了。这在帮助我们避免对空数据进行操作是非常有用的一个辅助函数。

// 该函数接受一个对象 obj
export const isNonEmptyObject = (obj: Record<string, unknown>) => {
  // 检查对象是否为非空对象,且键的数量大于0
  return typeof obj === 'object' && obj !== null && Object.keys(obj).length > 0;
};

使用示例:

const emptyObject = {};
const nonEmptyObject = { name: 'John Doe', age: 30 };

const isEmpty = isNonEmptyObject(emptyObject);
const isNotEmpty = isNonEmptyObject(nonEmptyObject);

console.log(`Empty object: ${isEmpty}`); // 输出:false
console.log(`Non-empty object: ${isNotEmpty}`); // 输出:true

7. 生成随机数字

当我们需要随机生成一个包含随机大小写字母和数字的字符串时,就可以使用下面的这个函数了。

// 该函数接受一个可选的长度参数 length,默认为10
export const generateRandomId = (length = 10) => {
  // 定义一个包含所有可能字符的字符串
  const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  // 初始化一个空字符串 id
  let id = '';

  // 循环 length 次,从 chars 中随机选择一个字符并添加到 id 中
  for (let i = 0; i < length; i++) {
    id += chars.charAt(Math.floor(Math.random() * chars.length));
  }

  // 返回生成的 id
  return id;
};

使用示例:

const randomId1 = generateRandomId();
const randomId2 = generateRandomId();

console.log(`Random ID 1: ${randomId1}`); // 输出:类似于 '4jH5y2d1kX'
console.log(`Random ID 2: ${randomId2}`); // 输出:类似于 'qW3E2v1z7B'

8. 深拷贝

当我们需要创建对象的深拷贝时,下面这个函数就很有用了。它可以帮助我们避免意外的去修改原始对象数据。减少bug的出现

// 定义一个泛型函数 deepCloneObject,用于深度克隆对象
export const deepCloneObject = <T extends Record<string, any>>(obj: T): T => {
  // 如果 obj 为空或不是对象,则直接返回 obj
  if (!obj || typeof obj !== 'object') return obj;

  // 创建一个新对象,用于存储克隆的值
  const copy: Record<string, any> = {};

  // 遍历 obj 中的每一个键
  for (const key in obj) {
    // 如果 obj[key] 是对象,则递归调用 deepCloneObject 进行深度克隆
    // 否则,直接复制 obj[key] 的值
    copy[key] = typeof obj[key] === 'object' ? deepCloneObject(obj[key]) : obj[key];
  }

  // 将 copy 转换为 T 类型并返回
  return copy as T;
};

使用示例:

const originalObject = {
  name: 'John Doe',
  age: 30,
  address: {
    city: 'San Francisco',
    country: 'USA'
  }
};

const clonedObject = deepCloneObject(originalObject);

console.log(`Original object: ${JSON.stringify(originalObject)}`);
console.log(`Cloned object: ${JSON.stringify(clonedObject)}`);

// 修改克隆对象
clonedObject.age = 35;
clonedObject.address.city = 'New York';

console.log(`Modified cloned object: ${JSON.stringify(clonedObject)}`);

// 原始对象保持不变
console.log(`Original object after modification: ${JSON.stringify(originalObject)}`);

标签:常用,const,函数,辅助,console,字符串,obj,log
From: https://blog.csdn.net/weixin_45215308/article/details/139637098

相关文章

  • 初阶 《函数》 4. 函数的调用
    4.函数的调用4.1传值调用函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参4.2传址调用传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操......
  • 初阶 《函数》 6. 函数的声明和定义
    6.函数的声明和定义6.1函数声明告诉编译器有一个函数叫什么、参数是什么、返回类型是什么。但是具体是不是存在,函数声明决定不了。函数的声明一般出现在函数的使用之前,要满足先声明后使用。函数的声明一般要放在头文件中intmain(void)//明确的说明,main函数不需要参......
  • 回调函数的代码示例及其意义与作用
    回调函数的代码示例及其意义与作用在C语言中,回调函数(CallbackFunction)同样具有重要的意义和作用。尽管C语言没有像JavaScript或Python那样内置的高级异步处理机制,但回调函数在C语言中仍然被广泛应用,尤其是在以下场景:事件驱动编程:当某个事件发生时(如定时器到期、用户输入、文......
  • Linux 系统下工作中常用的shell命令
    目录ls:列出目录内容cd:改变当前工作目录pwd:显示当前工作目录的路径cp:复制文件或目录mv:移动文件或目录rm:删除文件或目录mkdir:创建新目录touch:创建空文件cat:连接文件并打印到标准输出设备上grep:在文件中查找模式find:在文件系统中查找文件这些命令是非常常用的,每个命令......
  • KAN神经网络 | KAN函数拟合附代码
    首先,让我们快速概述一下KAN及其实现的理论:柯尔莫哥洛夫-阿诺德表示定理:我们跳过繁琐的公式和定义,只用一个简单的解释。KART指出,任何具有多个输入的连续函数都可以通过组合单个输入的简单函数(如正弦或平方)并将它们相加来创建。例如,多元函数f(x,y)=x*y。这可以写成:((......
  • 好用的库函数,qsort函数大详解(干货满满!)(初阶)
    前言;  我一直在思考今天要写什么类型的文章,看到之前写的冒泡排序的写法,不过冒牌排序的算法只能针对于整型,我们如果想要排序浮点型,字符型的数据呢?这个时候我突然想到了比冒泡排序还好用的一个库函数,就是我们今天的主角——qsort函数,下面不多废话,直接进入正文: 目录:1.qsor......
  • MySql 常用面试题 (一)
    MySQL面试题及答案整理1.MySQL中有哪几种锁?MySQL中有多种锁类型,它们可以根据不同的分类标准进行划分。以下是一些主要的锁类型:按粒度分:表锁:每次操作锁住整张表。开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。常用于整表数据迁移的场景。行锁:对......
  • React+TS前台项目实战(十)-- 全局常用组件CopyText封装
    文章目录前言CopyText组件1.功能分析2.代码+详细注释3.使用方式4.效果展示总结前言今天这篇主要讲项目常用复制文本组件封装,这个组件是一个用于拷贝文本的React组件,它提供了拷贝,国际化和消息提示的功能CopyText组件1.功能分析(1)将content作为其内容,表......
  • 【Python】高阶函数
    高阶函数高阶函数是接受另一个函数作为参数,并返回一个函数作为结果的函数。这种类型的函数是函数式编程的核心,因为它们允许对行为进行抽象和复用,使得代码更加简洁和灵活。defapply_function(func,value):returnfunc(value)defsquare(x):returnx*xpr......
  • 裸函数和调用约定
    一、裸函数在正常的函数编译中,即使函数没有定义函数体的内容,编译器也依然会编译出部分汇编指令用来执行函数。但是如果定义一个裸函数void_declspec(naked)test()编译器将不会操作这个函数,不会给其生成汇编指令(但是会在主函数中生成call和jmp指令指向这个裸函数)可以看到......