当前位置:

首页 > 编程开发 > 一文分享50个极致实用JavaScript单行代码(收藏即用)

一文分享50个极致实用JavaScript单行代码(收藏即用)

整理了50个原生JavaScript/TypeScript单行工具函数,覆盖字符串、数组、日期、浏览器等9大高频开发场景,包括数据处理、DOM操作、设备检测等。所有方法零依赖、适配主流环境,已修复时区、空值等常见BUG,可直接用于生产项目。

本文目录

    50个原生JS/TS高频单行工具函数!零依赖、生产可用,告别重复造轮子

    一文分享50个极致实用Ja vaScript单行代码(收藏即用)

    前言

    日常开发中,字符串处理、数组运算、日期格式化、浏览器API、对象数据清洗……这些基础逻辑几乎是每个前端项目都绕不开的环节。不少朋友为了省事,习惯性往项目里塞进 Lodash、Dayjs 这类重量级工具库。其实,绝大多数场景下完全没必要——几行原生 JS/TS 代码就能优雅搞定需求,还能减少打包体积、降低依赖,顺便把代码基本功练得更扎实。

    今天整理了 50 个生产可用的原生单行代码片段,覆盖前端 9 大高频开发场景。告别玩具代码,全部适配浏览器、Node.js、Vue、React 等主流环境,开箱即用,值得收藏一份。

    一、字符串操作(最高频)

    所有方法默认空值兜底,防止传参 undefined 导致报错。

    1. 字符串首字母大写

    const capitalize = (str = '') => str.charAt(0).toUpperCase() + str.slice(1);

    2. 反转字符串

    const reverseString = (str = '') => str.split('').reverse().join('');

    3. 判断字符串是否为回文

    const isPalindrome = (str = '') => str === str.split('').reverse().join('');

    二、数组操作

    1. 数组扁平化一层

    const flatArr = arr => arr.flat(1);

    2. 移除数组所有假值(自动过滤 false、0、空字符串、null、undefined、NaN)

    const removeFalsy = arr => arr.filter(Boolean);

    3. 快速生成 0-99 连续数组

    const createArr = () => Array.from({length: 100}, (_, i) => i);

    4. 随机打乱数组(Fisher–Yates 洗牌算法)

    const shuffleArr = arr => {
      const list = [...arr];
      for (let i = list.length - 1; i > 0; i--) {
        const j = Math.floor(Math.random() * (i + 1));
        [list[i], list[j]] = [list[j], list[i]];
      }
      return list;
    };

    5. 基础数组去重

    const uniqueArr = arr => [...new Set(arr)];

    6. 对象数组根据指定字段去重

    const uniqueByKey = (arr, key) => [...new Map(arr.map(item => [item[key], item])).values()];

    7. 获取多个数组交集

    const getIntersection = (a = [], ...arr) => [...new Set(a)].filter(v => arr.every(b => b.includes(v)));

    8. 查找数组最大值索引

    const maxIndex = (arr = []) => arr.length ? arr.indexOf(Math.max(...arr)) : -1;

    9. 查找数组最小值索引

    const minIndex = (arr = []) => arr.length ? arr.indexOf(Math.min(...arr)) : -1;

    10. 找到数组中最接近指定数字的值

    const closestNum = (arr = [], n = 0) => arr.reduce((a, b) => Math.abs(b - n) < Math.abs(a - n) ? b : a);

    11. 多个数组合并为二维数组

    const merge2D = (...arrList) => [...arrList];

    12. 矩阵行列转置

    const transpose = (matrix = []) => matrix[0]?.map((_, i) => matrix.map(row => row[i])) ?? [];

    三、数制转换

    原生 API 一行搞定,无需手写复杂公式。

    1. 十进制转换为任意 n 进制

    const decToBase = (num = 0, base = 10) => num.toString(base);

    2. 任意 n 进制转换为十进制

    const baseToDec = (str = '', base = 10) => parseInt(str, base);

    四、正则与文本处理

    全部增加异常捕获,适配不规则入参。

    1. 从URL中提取域名

    const getDomain = (url = '') => {
      try { return new URL(url).hostname; } catch { return ''; }
    };

    2. 验证电子邮箱格式

    const isEmail = (mail = '') => /^[^s@]+@[^s@]+.[^s@]+$/.test(mail);

    3. 移除文本所有多余空格

    const trimAll = (str = '') => str.replace(/s+/g, ' ').trim();

    五、浏览器原生 Web 操作

    零框架依赖,兼容所有现代浏览器。

    1. 重新加载当前页面

    const reloadPage = () => location.reload();

    2. 平滑滚动到页面顶部

    const scrollToTop = () => window.scrollTo({ top: 0, beha vior: 'smooth' });

    3. 平滑滚动到指定元素

    const scrollToEl = (el) => el?.scrollIntoView({ beha vior: 'smooth' });

    4. 检测当前浏览器是否为IE

    const isIE = () => !!window.ActiveXObject || /msie|trident/i.test(na vigator.userAgent);

    5. 移除文本中所有 HTML 标签

    const stripHtml = (html = '') => html.replace(/<[^>]*>/g, '');

    6. 页面重定向跳转

    const redirect = (url = '') => location.href = url;

    7. 一键复制文本到剪贴板

    const copyText = async (text = '') => {
      try { await na vigator.clipboard.writeText(text); return true; } 
      catch { return false; }
    };

    六、日期时间处理(重点修复时区BUG)

    1. 判断日期是否为今天

    const isToday = (date) => {
      const d1 = new Date(date);
      const d2 = new Date();
      return d1.getFullYear() === d2.getFullYear() &&
             d1.getMonth() === d2.getMonth() &&
             d1.getDate() === d2.getDate();
    };

    2. 日期转为标准 YYYY-MM-DD

    const formatDate = (date = new Date()) => {
      const d = new Date(date);
      const y = d.getFullYear();
      const m = String(d.getMonth() + 1).padStart(2, '0');
      const day = String(d.getDate()).padStart(2, '0');
      return `${y}-${m}-${day}`;
    };

    3. 秒数转为 hh:mm:ss 时长格式

    const secToTime = (s = 0) => {
      const t = Math.floor(s);
      const h = String(Math.floor(t / 3600)).padStart(2, '0');
      const m = String(Math.floor((t % 3600) / 60)).padStart(2, '0');
      const ss = String(t % 60).padStart(2, '0');
      return `${h}:${m}:${ss}`;
    };

    4. 获取指定年月的第一天

    const firstDay = (y, m) => new Date(y, m - 1, 1);

    5. 获取指定年月的最后一天

    const lastDay = (y, m) => new Date(y, m, 0);

    七、函数相关操作

    1. 判断是否为异步 async 函数

    const isAsyncFn = (fn) => fn?.constructor.name === 'AsyncFunction';

    八、数字精度处理(金额展示必备)

    专门用于前端金额、小数展示,精准可控。

    1. 截断小数(不四舍五入)

    const toFixedFloor = (num = 0, len = 2) => Math.trunc(num * Math.pow(10, len)) / Math.pow(10, len);

    2. 截断小数(自动四舍五入)

    const toFixedRound = (num = 0, len = 2) => Number(num.toFixed(len));

    3. 数字前置补零

    const padNum = (num = 0, len = 2) => num.toString().padStart(len, '0');

    九、对象常用操作(接口数据清洗神器)

    1. 清除对象 null、undefined 空属性

    const cleanObj = (obj = {}) => Object.fromEntries(Object.entries(obj).filter(([_, v]) => v != null));

    2. 交换对象键值

    const invertObj = (obj = {}) => Object.fromEntries(Object.entries(obj).map(([k, v]) => [v, k]));

    3. JSON 字符串转对象(异常捕获,非法字符串不报错)

    const strToObj = (str = '') => {
      try { return JSON.parse(str); } catch { return null; }
    };

    4. 生产级对象深度对比(重点推荐)

    避坑说明: 网上流行的 JSON.stringify 对比方式存在大量BUG,键顺序、undefined、NaN、日期都会对比失效。以下是轻量递归深对比方案,生产稳定可用。

    const deepEqual = (a, b) => {
      if (a === b) return true;
      if (!(a && b) || typeof a !== typeof b) return false;
      if (typeof a !== 'object') return false;
      const keysA = Object.keys(a);
      const keysB = Object.keys(b);
      if (keysA.length !== keysB.length) return false;
      return keysA.every(k => deepEqual(a[k], b[k]));
    };

    十、通用万能工具函数

    1. 生成随机十六进制颜色

    const randomColor = () => '#' + Math.floor(Math.random() * 0xffffff).toString(16).padStart(6, '0');

    2. RGB 转 HEX

    const rgbToHex = (r = 0, g = 0, b = 0) => '#' + [r, g, b].map(x => String(x.toString(16)).padStart(2, '0')).join('');

    3. HEX 转 RGB

    const hexToRgb = (hex = '') => {
      const h = hex.replace('#', '');
      return {
        r: parseInt(h.slice(0, 2), 16),
        g: parseInt(h.slice(2, 4), 16),
        b: parseInt(h.slice(4, 6), 16)
      };
    };

    4. 生成全局唯一 UUID

    const getUUID = () => crypto.randomUUID();

    5. 获取当前页面 Cookie

    const getCookie = () => document.cookie;

    6. 延迟等待函数

    const wait = (ms = 0) => new Promise(resolve => setTimeout(resolve, ms));

    写在最后

    本文所有代码已经修复了网络上常见的通用 BUG——时区错误、算法不均、空值报错、对象对比失效、浏览器兼容性等问题都做了针对性处理。所有方法零第三方依赖、轻量简洁,兼容浏览器、Node.js、Vue、React、uniapp 等绝大多数前端项目。

    日常开发中,大家可以将这些工具函数统一封装到项目的 utils.ts / utils.js 文件中,全局复用,彻底告别重复造轮子,写出更优雅、更健壮的业务代码。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 JavaScript
    相关文章 更多
    JS中Math.round与toFixed实现四舍五入的区别
    JS中Math.round与toFixed实现四舍五入的区别

    深入解析JavaScript中Math.round与toFixed的核心差异:前者返回数字,后者返回字符串。揭示IEEE 754浮点数导致的1.005舍入错误,提供前端显示与后端结算的最佳实践方案,包括使用分为单位整数和decimal.js库。

    JS实现指定小数位标准四舍五入函数
    JS实现指定小数位标准四舍五入函数

    解决JavaScript中1.005四舍五入为1.00而非1.01的精度问题。深入分析IEEE 754双精度浮点数表示误差,提供健壮的roundTo函数实现,涵盖NaN、Infinity及负数处理。对比toFixed与自定义方案,明确显示与结算的场景边界,附带边界用例验证表。

    JS toFixed四舍五入不准的修正方法
    JS toFixed四舍五入不准的修正方法

    深入解析JavaScript中toFixed方法四舍五入不准确的根本原因,提供基于指数表示法与数字偏移的安全修正方案,并配有直观架构图与对比示例。

    JS刷新页面:location.reload()与location.href的核心区别
    JS刷新页面:location.reload()与location.href的核心区别

    详解JavaScript中location.reload()和location.href刷新页面的机制差异。对比两者在HTTP缓存验证、POST请求重复提交警告、浏览器历史记录栈行为上的不同,并提供绕过强缓存、处理Hash变化及避免死循环的实战代码示例。

    typescript是什么语言?一文看懂其定义与用途
    typescript是什么语言?一文看懂其定义与用途

    深入浅出解析TypeScript是什么语言。本文详细介绍TypeScript的语言定义、超集架构、核心运行原理、与JavaScript的核心对比以及四类典型工业级应用场景,帮助读者全面看懂TS的价值与用途。

    JS金额计算怎么避免四舍五入误差
    JS金额计算怎么避免四舍五入误差

    解决JavaScript中0.1+0.2!=0.3的精度问题。深入解析IEEE 754浮点数机制,对比展示用toFixed与结算用整数分计算的适用场景,提供decimal.js库的正确用法与验证方法,帮助开发者在电商与金融场景中实现精确的金额处理。

    uniapp网络请求拦截怎么办解决方法教程
    uniapp网络请求拦截怎么办解决方法教程

    学习如何在UniApp项目中封装网络请求拦截器,实现自动携带Token、统一错误处理和请求日志记录,提升代码维护效率。

    前端文件上传接口怎么传使用FormData提交文件教程
    前端文件上传接口怎么传使用FormData提交文件教程

    详解如何使用原生 JavaScript 和 FormData 对象实现前端文件上传,涵盖单文件、多文件提交及进度监听,无需依赖重型库,提升代码可控性。

    为什么vivo浏览器内核不支持某些最新的JavaScript语法?
    为什么vivo浏览器内核不支持某些最新的JavaScript语法?

    vivo浏览器因系统级冻结WebView内核,版本锁定在89.0.4389.105及以下,不支持可选链、逻辑赋值等ES2022+新语法。可通过chrome://version确认内核版本。临时方案:使用Babel转译代码,或改用KiwiBrowser、CometAI浏览器(自带Polyfill注入)。

    前端:JavaScript中的二叉树算法实现
    前端:JavaScript中的二叉树算法实现

    圣诞快乐接下来,咱们一起深入探讨一下js数据结构中的树。其实呀,这里的树和现实生活中的树很相似,都有树干、树枝。而在程序里,树可是一种非常重要的数据结构哦,对于存储那些需要快速查找的数据来说,它简直太有用啦!它是一种分层数据的抽象模型。一个树结构包含了一系列具有父子关系的节点。每个节点都有一个父节点

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。