- Author: Chen Dayutou
- github: KRISACHAN
Fishhead summarizes some JS techniques that can improve the efficiency of development. These techniques are very practical and feel good. I want to recommend them to you, so I have this article.
Generating random UID
const genUid = () => { var length = 20 var soupLength = genUid.soup_.length var id = [] for (var i = 0; i < length; i++) { id[i] = genUid.soup_.charAt(Math.random() * soupLength) } return id.join('') } genUid.soup_ = '!#$%()*+,-./:;=?@[]^_`{|}~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' genUid() // ;l`yCPc9A8IuK}?N6,%}
Generate an array of specified length without loop
const List = len => [...new Array(len).keys()] const list = List(10) // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
One line of code to de-multiply arrays
const list = [1, 1, 2, 3, 6, 45, 8, 5, 4, 6, 5] const uniqueList = [...new Set(list)] // [1, 2, 3, 6, 45, 8, 5, 4]
RGB color value generates hexadecimal color value
const rgb2Hex = rgb => { let rgbList = rgb.toString().match(/\d+/g) let hex = '#' for (let i = 0, len = rgbList.length; i < len; ++i) { hex += ('0' + Number(rgbList[i]).toString(16)).slice(-2) } return hex }; rgb2Hex('100, 50, 0') // '#643200'
Color mixing
const colourBlend = (c1, c2, ratio) => { ratio = Math.max(Math.min(Number(ratio), 1), 0) let r1 = parseInt(c1.substring(1, 3), 16) let g1 = parseInt(c1.substring(3, 5), 16) let b1 = parseInt(c1.substring(5, 7), 16) let r2 = parseInt(c2.substring(1, 3), 16) let g2 = parseInt(c2.substring(3, 5), 16) let b2 = parseInt(c2.substring(5, 7), 16) let r = Math.round(r1 * (1 - ratio) + r2 * ratio) let g = Math.round(g1 * (1 - ratio) + g2 * ratio) let b = Math.round(b1 * (1 - ratio) + b2 * ratio) r = ('0' + (r || 0).toString(16)).slice(-2) g = ('0' + (g || 0).toString(16)).slice(-2) b = ('0' + (b || 0).toString(16)).slice(-2) return '#' + r + g + b } colourBlend('#ff0000', '#3333ff', 0.5) // "#991a80"
Judging whether it is a prime number
const mathIsPrime = n => { if (n === 2 || n === 3) { return true } if (isNaN(n) || n <= 1 || n % 1 != 0 || n % 2 == 0 || n % 3 == 0) { return false; } for (let x = 6; x <= Math.sqrt(n) + 1; x += 6) { if (n % (x - 1) == 0 || n % (x + 1) == 0) { return false } } return true } mathIsPrime(0) // true
Traversing class array objects
const elements = document.querySelectorAll(selector); [].prototype.forEach.call(elements, (el, idx, list) => { console.log(el) // Element Node })
Judging Object Type
const type = data => Object.prototype.toString.call(data).replace(/^\[object (.+)\]$/, '$1').toLowerCase() type({}) // object
Optimizing Multilayer Judgment Conditions
const getScore = score => { const scoreData = new Array(101).fill(0) .map((data, idx) => ([idx, () => (idx < 60 ? 'Fail' : 'pass')])) const scoreMap = new Map(scoreData) return (scoreMap.get(score) ? scoreMap.get(score)() : 'Unknown fraction') } getScore(30) // Fail
Time Formatting
const dateFormatter = (formatter, date) => { date = (date ? new Date(date) : new Date) const Y = date.getFullYear() + '', M = date.getMonth() + 1, D = date.getDate(), H = date.getHours(), m = date.getMinutes(), s = date.getSeconds() return formatter.replace(/YYYY|yyyy/g, Y) .replace(/YY|yy/g, Y.substr(2, 2)) .replace(/MM/g, (M < 10 ? '0' : '') + M) .replace(/DD/g, (D < 10 ? '0' : '') + D) .replace(/HH|hh/g, (H < 10 ? '0' : '') + H) .replace(/mm/g, (m < 10 ? '0' : '') + m) .replace(/ss/g, (s < 10 ? '0' : '') + s) } dateFormatter('YYYY-MM-DD HH:mm', '1995/02/15 13:55') // 1995-02-15 13:55
Epilogue
The above ten techniques are some code snippets that I often use in daily development. Making good use of these techniques can greatly reduce our development time. If you are reading the article at this time and you have similar skills, you may wish to leave a message below to share with you.
If you like to explore technology, or have any comments or suggestions for this article, you can scan the following two-dimensional code, pay attention to the Wechat public number "Fish Head Web Ocean", and interact with the Fish Head at any time. Welcome! I sincerely hope to meet you.
<img style="margin: 24px auto;display: block; font-size: 0; vertical-align: middle;" src="https://user-gold-cdn.xitu.io...;h=238&f=png&s=43019" />