15 个拯救生命的 JavaScript 单行程序(续篇)

作者: 刘星
日期: 2021年12月15日

JavaScript

在上一篇文章,我展示 16 个用于 DOM、数组、对象操作的 JavaScript 单行程序。在本文中,我将继续介绍一些用于字符串、日期处理以及其他一些有用的单行程序。

查看上一篇文章:15 个拯救生命的 JavaScript 单行程序

1、检查路径是不是相对路径

const isRelative = (path) => !/^([a-z]+:)?[\\/]/i.test(path);
// Examples
isRelative('/foo/bar/baz'); // false
isRelative('C:\\foo\\bar\\baz'); // false
isRelative('foo/bar/baz.txt'); // true
isRelative('foo.md'); // true

在 nodejs 中你也可以用 path.isAbsolute(path) 来判断是不是绝对路径

2、将字符串的首字母小写

const lowercaseFirst = (str) => `${str.charAt(0).toLowerCase()}${str.slice(1)}`;
// Example
lowercaseFirst('Hello World'); // 'hello World'

3、 检查字符串是否为十六进制颜色

const isHexColor = (color) => /^#([0-9A-F]{3}|[0-9A-F]{4}|[0-9A-F]{6}|[0-9A-F]{8})$/i.test(color);

// Examples
isHexColor('#012'); // true
isHexColor('#A1B2C3'); // true
isHexColor('012'); // false
isHexColor('#GHIJKL'); // false

4、给一个时间添加"am/pm"后缀

// `h` 是小时,0 - 23
const suffixAmPm = (h) => `${h % 12 === 0 ? 12 : h % 12}${h < 12 ? 'am' : 'pm'}`;

// Examples
suffixAmPm(0); // '12am'
suffixAmPm(5); // '5am'
suffixAmPm(12); // '12pm'
suffixAmPm(15); // '3pm'
suffixAmPm(23); // '11pm'

5、计算两个日期之间的间隔天数

const diffDays = (date, otherDate) => Math.ceil(Math.abs(date - otherDate) / (1000 * 60 * 60 * 24));

// Example
diffDays(new Date('2014-12-19'), new Date('2020-01-01')); // 1839

6、检查日期是否有效

const isDateValid = (...val) => !Number.isNaN(new Date(...val).valueOf());

isDateValid("December 17, 1995 03:24:00"); // true

7、检查代码是否在 Node.js 中运行

const isNode = typeof process !== 'undefined' && process.versions != null && process.versions.node != null;

8、检查代码是否在浏览器中运行

const isBrowser = typeof window === 'object' && typeof document === 'object';

9、将 URL 参数转换为对象

const getUrlParams = query =>
  Array.from(new URLSearchParams(query)).reduce(
    (p, [k, v]) => ({
      ...p,
      [k]: p[k] ? (Array.isArray(p[k]) ? p[k] : [p[k]]).concat(v) : v,
    }),
    {},
  );

// Examples
getUrlParams(location.search);
getUrlParams('foo=Foo&bar=Bar'); // { foo: "Foo", bar: "Bar" }
// Duplicate key
getUrlParams('foo=Foo&foo=Fuzz&bar=Bar'); // { foo: ["Foo", "Fuzz"], bar: "Bar" }

10、检测暗黑模式

const isDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;

11、复制到剪贴板

const copyToClipboard = (text) => navigator.clipboard.writeText(text);
// 示例
copyToClipboard("Hello World");

12、将 RGB 转换为十六进制

const rgbToHex = (r, g, b) => "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1) ;
// 示例
rgbToHex(0, 51, 255); // #0033ff

13、生成随机十六进制颜色

const randomColor = () => `#${Math.random().toString(16).slice(2, 8).padEnd(6, '0')}`;
// 或者
const randomColor = () => `#${(~~(Math.random() * (1 << 24))).toString(16)}`;

14、生成随机 IP 地址

const randomIp = () => Array(4).fill(0)
  .map((_, i) => Math.floor(Math.random() * 255) + (i === 0 ? 1 : 0) )
  .join('.');
// 示例
randomIp(); // 175.89.174.131

15、使用 Node 加密模块生成随机字符串

const randomStr = () => require('crypto').randomBytes(32).toString('hex');

亲爱的读者,

感谢你的时间。如果你在评论区留下的想法或是点赞、关注、在看,我会十分高兴。

文档信息

版权声明:署名-非商业性使用-禁止演绎 4.0 国际(CC BY-NC-ND 4.0)

原文链接:https://www.liuxing.io/blog/17-life-saving-javascript-one-liners-anthor/

发表日期:2021年12月15日


相关文章

最近更新