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); | |
| ---- | |
| 
 | |
| 
 | |
| 
 | |
| 
 |