Escape regular expression (转义正则表达式)
使用 replace()
去转义特殊字符。
const escapeRegExp = str => str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
// escapeRegExp('(test)') -> \\(test\\)
Get native type of value (获取值的原始类型)
返回值的构造函数名称的小写字符,值为 undefined
或 null
时则返回undefined
或 null
。
const getType = v =>
v === undefined ? 'undefined' : v === null ? 'null' : v.constructor.name.toLowerCase();
// getType(new Set([1,2,3])) -> "set"
Is array (是否是数组)
使用 Array.isArray()
去检查值是否为数组。
const isArray = val => !!val && Array.isArray(val);
// isArray(null) -> false
// isArray([1]) -> true
Is boolean (是否为布尔值)
使用 typeof
去检查值是否为原始布尔值类型。
const isBoolean = val => typeof val === 'boolean';
// isBoolean(null) -> false
// isBoolean(false) -> true
Is function (是否为函数)
使用 typeof
去检查值是否为函数原始类型。
const isFunction = val => val && typeof val === 'function';
// isFunction('x') -> false
// isFunction(x => x) -> true
Is number (是否为数值)
使用typeof
去检查值是否为数值原始类型。
const isNumber = val => typeof val === 'number';
// isNumber('1') -> false
// isNumber(1) -> true
Is string (是否为字符串)
使用 typeof
去检查值是否为字符串原始类型。
const isString = val => typeof val === 'string';
// isString(10) -> false
// isString('10') -> true
Is symbol (是否为 symbol 类型)
使用 typeof
去检查值是否为symbol
原始类型。
const isSymbol = val => typeof val === 'symbol';
// isSymbol('x') -> false
// isSymbol(Symbol('x')) -> true
Measure time taken by function (测量函数的耗时)
使用 console.time()
和 console.timeEnd()
来测量开始和结束时间之间的差异,以确定回调执行的时间。
const timeTaken = callback => {
console.time('timeTaken');
const r = callback();
console.timeEnd('timeTaken');
return r;
};
// timeTaken(() => Math.pow(2, 10)) -> 1024
// (logged): timeTaken: 0.02099609375ms
Number to array of digits (数值转换为数组)
将数值转换为字符串,使用 split()
分割为数组。 再使用 Array.map()
和 parseInt()
将每个值转换为整数。
const digitize = n => (''+n).split('').map(i => parseInt(i));
// digitize(2334) -> [2, 3, 3, 4]
Ordinal suffix of number (数值增加序号后缀)
使用模运算符(%
)来查找单位数和十位数的值。 查找数字匹配哪些序号模式。 如果数字在十几的模式中找到,请使用的十几的序数。
const toOrdinalSuffix = num => {
const int = parseInt(num), digits = [(int % 10), (int % 100)],
ordinals = ['st', 'nd', 'rd', 'th'], oPattern = [1, 2, 3, 4],
tPattern = [11, 12, 13, 14, 15, 16, 17, 18, 19];
return oPattern.includes(digits[0]) && !tPattern.includes(digits[1]) ? int + ordinals[digits[0] - 1] : int + ordinals[3];
};
// toOrdinalSuffix("123") -> "123rd"
Random integer in range (指定范围内的随机整数)
使用 Math.random()
去生成一个在指定范围内的随机数,使用Math.floor()
将其转换为整数。
const randomIntegerInRange = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min;
// randomIntegerInRange(0, 5) -> 2
Random number in range (指定范围内的随机数)
使用 Math.random()
去生成一个在指定范围内的随机数。
const randomInRange = (min, max) => Math.random() * (max - min) + min;
// randomInRange(2,10) -> 6.0211363285087005
RGB to hexadecimal (RGB转十六进制)
使用按位左移运算符(<<
)和toString(16)
将RGB
参数转换为十六进制,然后使用 padStart(6, '0')
去获取6位数的十六进制。
const rgbToHex = (r, g, b) => ((r << 16) + (g << 8) + b).toString(16).padStart(6, '0');
// rgbToHex(255, 165, 1) -> 'ffa501'
Swap values of two variables (交换两个变量的值)
使用数组解构来交换两个变量之间的值。
[varA, varB] = [varB, varA];
// [x, y] = [y, x]
URL parameters (URL参数)
使用 match()
和一个合适的正则去获取所有键值对,使用 Array.reduce()
合并到一个对象中。 允许将location.search
作为参数传递。
const getUrlParameters = url =>
url.match(/([^?=&]+)(=([^&]*))/g).reduce(
(a, v) => (a[v.slice(0, v.indexOf('='))] = v.slice(v.indexOf('=') + 1), a), {}
);
// getUrlParameters('http://url.com/page?name=Adam&surname=Smith') -> {name: 'Adam', surname: 'Smith'}
UUID generator (UUID生成器)
使用 crypto
API 生成符合 RFC4122 版本4的UUID。
const uuid = _ =>
([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c =>
(c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)
);
// uuid() -> '7982fcfe-5721-4632-bede-6000885be57d'
Validate email (校验邮箱)
使用正则表达式去检验邮箱格式。 返回true
表示邮箱格式正确,false
则不正确。
const validateEmail = str =>
/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(str);
// validateEmail(mymail@gmail.com) -> true
Validate number (校验数值)
使用 !isNaN
和 parseFloat()
来检查参数是否是一个数字(或允许转换为数值)。 使用 isFinite()
来检查数字是否是有限的。 使用 Number()
来检查数值转换是否成立。
const validateNumber = n => !isNaN(parseFloat(n)) && isFinite(n) && Number(n) == n;
// validateNumber('10') -> true
Value or default (值或默认值)
默认返回 value
如果value
为假,则返回默认值。
const valueOrDefault = (value, d) => value || d;
// valueOrDefault(NaN, 30) -> 30