You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
186 lines
4.8 KiB
186 lines
4.8 KiB
= Javascript 常用技巧
|
|
== 如何确认给定的日期是否是当前日期
|
|
[source,javascript]
|
|
----
|
|
const isCurrentDay = (date) => new Date().toISOString().slice(0, 10) === date.toISOString().slice(0, 10);
|
|
----
|
|
|
|
== 如何确定一个日期是否在两个日期之间
|
|
[source,javascript]
|
|
----
|
|
const isBetweenTwoDates = ( min, max, date) => date.getTime() >= min.getTime() && date.getTime() <= max.getTime();
|
|
----
|
|
|
|
== 如何确认一个日期是否在周末
|
|
[source,javascript]
|
|
----
|
|
const isWeekend = ( date ) => date.getDay() === 6 || date.getDay() === 0;
|
|
----
|
|
|
|
== 检查一个日期是否在某年内
|
|
[source,javascript]
|
|
----
|
|
const isInAYear = (date, year) => date.getUTCFullYear() === new Date(`${year}`).getUTCFullYear();
|
|
----
|
|
|
|
== 将小时转换为 AM-PM 格式
|
|
[source,javascript]
|
|
----
|
|
const toAMPMFormat= (h) => `${h % 12 === 0 ? 12 : h % 12}${h < 12 ? ' am.' : ' pm.'}`;
|
|
----
|
|
|
|
== 将句子的第一个字母大写
|
|
[source,javascript]
|
|
----
|
|
const capitalize = ([first, ...rest]) => `${first.toUpperCase()}${rest.join('')}`;
|
|
----
|
|
|
|
== 将英文字母转成对应的emoji形式
|
|
[source,javascript]
|
|
----
|
|
const letterToEmoji = c => String.fromCodePoint(c.toLowerCase().charCodeAt() + 127365);
|
|
----
|
|
|
|
== 如何判断一个字符串是不是回文
|
|
[source,javascript]
|
|
----
|
|
const isPalindrome = (str) => str.toLowerCase() === str.toLowerCase().split('').reverse().join('');
|
|
----
|
|
|
|
== 如何计算一个数的阶乘
|
|
[source,javascript]
|
|
----
|
|
const getFactorial = (n) => (n <= 1 ? 1 : n * getFactorial(n - 1));
|
|
----
|
|
|
|
== 如何计算一个斐波那契数列第N项(Fibonacci)?
|
|
[source,javascript]
|
|
----
|
|
const getFibonacci = (n, memo = {}) => memo[n] || (n <= 2 ? 1 : (memo[n] = getFibonacci(n - 1, memo) + getFibonacci(n - 2, memo)));
|
|
----
|
|
|
|
== 数组复制
|
|
[source,javascript]
|
|
----
|
|
const copyToArray = (arr) => [...arr];
|
|
----
|
|
|
|
== 简单数组去重
|
|
[source,javascript]
|
|
----
|
|
const getUnique = (arr) => [...new Set(arr)];
|
|
----
|
|
|
|
== 洗牌算法(随机数组)
|
|
[source,javascript]
|
|
----
|
|
const shuffle = (arr) => arr.sort(() => Math.random() - 0.5);
|
|
----
|
|
|
|
== 按属性对数组进行聚合分组(类似 SQL 的 group by)
|
|
[source,javascript]
|
|
----
|
|
const groupBy = (arr, groupFn) =>
|
|
arr.reduce( (grouped, obj) =>
|
|
({...grouped,
|
|
[groupFn(obj)]: [...(grouped[groupFn(obj)] || []), obj], }),
|
|
{});
|
|
----
|
|
|
|
== 反转字符串
|
|
[source,javascript]
|
|
----
|
|
const reverseString = (str) => str.split('').reverse().join('');
|
|
----
|
|
|
|
== 检查两个数组是否包含相同的值
|
|
[source,javascript]
|
|
----
|
|
const containSameValues= (arr1, arr2) => arr1.sort().join(',') === arr2.sort().join(',');
|
|
----
|
|
|
|
== 温度转换(符号℉。华氏度 = 32+ 摄氏度× 1.8)
|
|
[source,javascript]
|
|
----
|
|
const toFahrenheit= (celsius) => (celsius * 9)/5 + 32;
|
|
const toCelsius= (fahrenheit) => (fahrenheit - 32) * 5 / 9;
|
|
----
|
|
|
|
== 如何清除浏览器中的所有 cookie
|
|
[source,javascript]
|
|
----
|
|
const clearAllCookies = () => document.cookie.split(';')
|
|
.forEach((c) => (document.cookie = c.replace(/^ +/, '')
|
|
.replace(/=.*/, `=;expires=${new Date().toUTCString()};
|
|
path=/`)));
|
|
----
|
|
|
|
== 如何从 HEX 转换为 RGB 色值
|
|
[source,javascript]
|
|
----
|
|
const toRGB= (hex) =>
|
|
hex
|
|
.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,
|
|
(_, r, g, b) => `#${r}${r}${g}${g}${b}${b}`)
|
|
.substring(1)
|
|
.match(/.{2}/g)
|
|
.map((x) => parseInt(x, 16));
|
|
----
|
|
|
|
== 如何将 RGB 转换为 HEX
|
|
[source,javascript]
|
|
----
|
|
const toHEX = (r,g,b) => "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
|
|
----
|
|
|
|
== 检查函数是否为异步函数
|
|
[source,javascript]
|
|
----
|
|
const isAsyncFunction = (f) => Object.prototype.toString.call(f) === '[object AsyncFunction]';
|
|
----
|
|
|
|
== 如何确认代码是否在浏览器中运行
|
|
[source,javascript]
|
|
----
|
|
const runningInBrowser = typeof window === 'object' && typeof document === 'object';
|
|
----
|
|
|
|
== 如何确认代码是否在 Node 中运行
|
|
[source,javascript]
|
|
----
|
|
const runningInNode= typeof process !== 'undefined' && process.versions != null && process.versions.node != null;
|
|
----
|
|
|
|
== 检测系统是否是暗模式
|
|
[source,javascript]
|
|
----
|
|
const isDarkMode = () => window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches;
|
|
----
|
|
|
|
== 滚动到顶部
|
|
[source,javascript]
|
|
----
|
|
const toTop = (element) => element.scrollIntoView({ behavior: "smooth", block: "start" });
|
|
----
|
|
|
|
== 滚动到底部
|
|
[source,javascript]
|
|
----
|
|
const toBottom = (element) => element.scrollIntoView({ behavior: "smooth", block: "end" });
|
|
----
|
|
|
|
== 将 JSON 转换为 MAP
|
|
[source,javascript]
|
|
----
|
|
const jsonToMap = (json) => new Map(Object.entries(JSON.parse(json)));
|
|
----
|
|
|
|
== 生成 128 位 UUID
|
|
[source,javascript]
|
|
----
|
|
const generateUUID = (a) => a?
|
|
(a ^ ((Math.random() * 16) >> (a / 4))).toString(16):([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g,generateUUID);
|
|
----
|
|
|
|
|
|
|
|
|