提升開發(fā)幸福感的10條JS技巧

總結(jié)一些能夠提高開發(fā)效率的JS技巧逸邦,這些技巧很實用蜓席,覺得挺好,想推薦給大家障涯,所以有了這篇文章。

生成隨機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,%}

無loop生成指定長度的數(shù)組

const List = len => [...new Array(len).keys()]

const list = List(10) // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

一行代碼去重數(shù)組

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色值生成16進制色值

const rgb2Hex = (r, g, b) => {

? ? r = Math.max(Math.min(Number(r), 100), 0) * 2.55

? ? g = Math.max(Math.min(Number(g), 100), 0) * 2.55

? ? b = Math.max(Math.min(Number(b), 100), 0) * 2.55

? ? r = ('0' + (Math.round(r) || 0).toString(16)).slice(-2)

? ? g = ('0' + (Math.round(g) || 0).toString(16)).slice(-2)

? ? b = ('0' + (Math.round(b) || 0).toString(16)).slice(-2)

? ? return '#' + r + g + b

}

rgb2Hex(100, 50, 0) // "#ff7f00"

顏色混合

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"

判斷是否為質(zhì)數(shù)

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

遍歷類數(shù)組對象

const elements = document.querySelectorAll(selector);

[].prototype.forEach.call(elements, (el, idx, list) => {

? ? console.log(el) // 元素節(jié)點

})

判斷對象類型

const type = data => Object.prototype.toString.call(data).replace(/^\[object (.+)\]$/, '$1').toLowerCase()

type({}) // object

優(yōu)化多層判斷條件

const getScore = score => {

? ? const scoreData = new Array(101).fill(0)

? ? .map((data, idx) => ([idx, () => (idx < 60 ? '不及格' : '及格')]))

? ? const scoreMap = new Map(scoreData)

? ? return (scoreMap.get(score)

? ? ? ? ? ? scoreMap.get(score)()

? ? ? ? ? : '未知分數(shù)')

}

getScore(30) // 不及格

時間格式化

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

后記

如果此時正在看文章的你也有類似的技巧心得膳汪,不妨在下方留言來分享給大家唯蝶。

如果覺得文章對您有幫助,請動動手指點贊加關(guān)注我喲遗嗽!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末粘我,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子痹换,更是在濱河造成了極大的恐慌征字,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件娇豫,死亡現(xiàn)場離奇詭異匙姜,居然都是意外死亡,警方通過查閱死者的電腦和手機冯痢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門氮昧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來框杜,“玉大人,你說我怎么就攤上這事袖肥∵淙瑁” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵椎组,是天一觀的道長油狂。 經(jīng)常有香客問我,道長寸癌,這世上最難降的妖魔是什么专筷? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮灵份,結(jié)果婚禮上仁堪,老公的妹妹穿的比我還像新娘哮洽。我一直安慰自己填渠,他們只是感情好,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布鸟辅。 她就那樣靜靜地躺著氛什,像睡著了一般。 火紅的嫁衣襯著肌膚如雪匪凉。 梳的紋絲不亂的頭發(fā)上枪眉,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機與錄音再层,去河邊找鬼贸铜。 笑死,一個胖子當著我的面吹牛聂受,可吹牛的內(nèi)容都是我干的蒿秦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蛋济,長吁一口氣:“原來是場噩夢啊……” “哼棍鳖!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起碗旅,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤渡处,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后祟辟,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體医瘫,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年旧困,在試婚紗的時候發(fā)現(xiàn)自己被綠了登下。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茫孔。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖被芳,靈堂內(nèi)的尸體忽然破棺而出缰贝,到底是詐尸還是另有隱情,我是刑警寧澤畔濒,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布剩晴,位于F島的核電站,受9級特大地震影響侵状,放射性物質(zhì)發(fā)生泄漏赞弥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一趣兄、第九天 我趴在偏房一處隱蔽的房頂上張望绽左。 院中可真熱鬧,春花似錦艇潭、人聲如沸拼窥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鲁纠。三九已至,卻和暖如春鳍寂,著一層夾襖步出監(jiān)牢的瞬間改含,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工迄汛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留捍壤,地道東北人。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓鞍爱,卻偏偏與公主長得像鹃觉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子硬霍,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容