DOM
检查一个元素是否被聚焦
1 | const hasFocus = (ele) => ele === document.activeElement |
获取一个元素的所有兄弟元素
1 | const siblings = (ele) => .slice.call(ele.parentNode.children).filter((child) => child !== ele); |
获取选中文本
1 | const getSelectedText = () => window.getSelection().toString(); |
回到上一页
1 | history.back();// Orhistory.go(-1); |
清除所有 cookies
1 | const cookies = document.cookie.split(';').map((item) => item.split('=')).reduce((acc, [k, v]) => (acc[k.trim().replace('"', '')] = v) && acc, {}); |
将 cookie 转换为对象
1 | const cookies = document.cookie.split(';').map((item) => item.split('=')).reduce((acc, [k, v]) => (acc[k.trim().replace('"', '')] = v) && acc, {}); |
数组
比较两个数组
1 | // `a` 和 `b` 都是数组const isEqual = (a, b) => JSON.stringify(a) === JSON.stringify(b);// 或者const isEqual = (a, b) => a.length === b.length && a.every((v, i) => v === b[i]);// 事例isEqual([1, 2, 3], [1, 2, 3]); // trueisEqual([1, 2, 3], [1, '2', 3]); // false |
将对象数组转换为单个对象
1 | const toObject = (arr, key) => arr.reduce((a, b) => ({ ...a, [b[key]]: b }), {}); |
根据对象数组的属性进行计数
1 | const countBy |
检查数组是否为空
1 | const isNotEmpty = (arr) => Array.isArray(arr) && Object.keys(arr).length > 0; |
对象
检查多个对象是否相等
1 | const isEqual |
从对象数组中提取指定属性的值
1 | const pluck = (objs, property) => objs.map((obj) => obj[property]); |
反转对象的键和值
1 | const invert |
从对象中删除所有 null 和 undefined 的属性
1 | const removeNullUndefined = (obj) => |
根据对象的属性对其进行排序
1 | Object.keys(obj) |
检查一个对象是否是Promise
1 | const isPromise = (obj) => |
检查一个对象是否是一个数组
1 | const isArray = (obj) => Array.isArray(obj); |
字符串
检查路径是否是相对路径
1 | const isRelative = (path) => !/^([a-z]+:)?[\\/]/i.test(path); |
将字符串的第一个字符改为小写
1 | const lowercaseFirst = (str) => `${str.charAt(0).toLowerCase()}${str.slice(1)}`; |
重复一个字符串
1 | const repeat = (str, numberOfTimes) => str.repeat(numberOfTimes); |
Dates
给一个小时添加“am/pm”后缀
1 | // `h` is an hour number between 0 and 23 |
计算两个日期之间的不同天数
1 | const diffDays = (date, otherDate) => Math.ceil(Math.abs(date - otherDate) / (1000 * 60 * 60 * 24)); |
检查日期是否有效
1 | const isDateValid = (...val) => !Number.isNaN(new Date(...val).valueOf()); |
其它
检查代码是否在Node.js中运行
1 | const isNode = typeof process !== 'undefined' && process.versions != null && |
检查代码是否在浏览器中运行
1 | const isBrowser = typeof window === 'object' && typeof document === 'object'; |
将URL参数转换为对象
1 | const getUrlParams = (query) =>Array.from(new URLSearchParams(query)).reduce((p, [k, v]) => Object.assign({}, p, { [k]: p[k] ? (Array.isArray(p[k]) ? p[k] : [p[k]]).concat(v) : v }),{}); |
黑暗检测模式
1 | const isDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches; |
拷贝到剪切板
1 | const copyToClipboard = (text) => |
将RGB转换为十六进制
1 | const rgbToHex = (r, g, b) => "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);// 例子rgbToHex(0, 51, 255); // #0033ff |
生成一个随机的十六进制颜色
1 | const randomColor = () => `#${Math.random().toString(16).slice(2, 8).padEnd(6, '0')}`; |
生成随机IP地址
1 | const randomIp = () => Array(4).fill(0) |
使用 Node crypto 模块生成随机字符串
1 | const randomStr = () => require('crypto').randomBytes(32).toString('hex'); |
按长度截取字符串
1 | function splitByLen(str,len){ |