天天看點

11 個讓你驚歎的罕見 JavaScript One-Liner

11 個讓你驚歎的罕見 JavaScript One-Liner

英文 | https://betterprogramming.pub/11-rare-javascript-one-liners-that-will-amaze-you-331659832301

翻譯 | 楊小二

如果你想給專業開發人員留下深刻印象,你會怎麼做?很簡單:用簡單的邏輯和盡可能少的代碼來解決一個複雜的問題。随着 ES6 箭頭函數的引入,可以建立看起來優雅和簡單的單行代碼。

在本文中,我将與你分享11 種罕見但功能強大的 one-liner。你準備好了嗎?讓我們從第一個開始吧!

1、擷取字元串中的字元數

擷取字元數是一個有用的實用程式,在許多情況下都很有用。你可以使用它來擷取空格數和随後的單詞數,或者這可用于擷取字元串中某個分隔符的計數。

11 個讓你驚歎的罕見 JavaScript One-Liner
const characterCount = (str, char) => str.split(char).length - 1      

這個想法非常簡單。我們使用傳遞的參數 char 拆分字元串并獲得傳回數組的長度。因為每一次分割字元串,都會比分割器多一根;是以減去 1,我們有一個 characterCount 單行。

2、 檢查對象是否為空

檢查對象的空性實際上比看起來要困難得多。每次檢查對象是否等于 {} 都會傳回 false,即使該對象為空。

幸運的是,下面的單行代碼正是我們想要的。

11 個讓你驚歎的罕見 JavaScript One-Liner
const isEmpty = obj => Reflect.ownKeys(obj).length === 0 && obj.constructor === Object      

在這一行中,我們檢查對象的鍵的長度是否等于 0,以及傳遞的參數是否為實際對象。

3、等待一定時間後執行

在這個單行代碼中,我們将接觸一些異步程式設計。這個想法很簡單。在運作代碼時,如果你想等待一定的時間,這裡是wait one-liner:

11 個讓你驚歎的罕見 JavaScript One-Liner
const wait = async (milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds));      

在wait one-liner中,我們建立一個promise并在給定的時間後使用setTimeout函數解決它。

4、擷取兩個日期之間的天差

在開發 Web 應用程式時,日期通常是最容易混淆的部分,因為有許多概念很容易被誤算。

這是一個強大的單行程式來計算兩個日期之間的天差。但還有更多的事情要做。和我一樣,你可以建立自己的單線來計算月、年差等。

11 個讓你驚歎的罕見 JavaScript One-Liner
const daysBetween = (date1, date2) => Math.ceil(Math.abs(date1 - date2) / (1000 * 60 * 60 * 24))      

這種單行背後的邏輯很容易了解。當兩個日期相減時,傳回值是以毫秒為機關的內插補點。要将毫秒轉換為天,我們必須将其分别除以毫秒、秒、分鐘和小時。

5、重定向到另一個 URL

如果你曾經建立過一個真實的網站,我敢肯定你會遇到身份驗證邏輯。例如,非管理者使用者不應該能夠通路 /admin 路由。如果使用者嘗試,那麼,你必須将其重定向到另一個 URL。

這種單線正好适用于我上面提到的情況,但我認為你可以找到更多的用例。

11 個讓你驚歎的罕見 JavaScript One-Liner
const redirect = url => location.href = url      

location 是全局 window 對象上的一個方法,設定 href 屬性的行為與使用者點選連結的行為相同。

6、檢查裝置上的觸摸支援

随着可以連接配接到網際網路的裝置越來越多,建立響應式網站的必要性也越來越高。20 年前,開發者應該考慮過桌面版網站,但今天超過 50% 的網絡流量來自觸摸裝置。

是以,基于裝置的觸摸支援采取一些行動是一個如此重要的概念。

11 個讓你驚歎的罕見 JavaScript One-Liner
const touchSupported = () => ('ontouchstart' in window || DocumentTouch && document instanceof DocumentTouch)      

在這一行中,我們正在檢查文檔是否支援 touchstart 事件。

7、在元素後插入一串 HTML

開發 Web 應用程式,使用 JavaScript 更新 DOM 是一件很常見的事情。有一些基本的方法可以完成工作,但是當情況變得複雜時,就很難克服。

這是在 HTML 元素之後立即注入一串 HTML 的單行代碼。通過幾分鐘的思考和谷歌搜尋,我相信你可以找到這個單行的之前版本。

11 個讓你驚歎的罕見 JavaScript One-Liner
const insertHTMLAfter = (html, el) => el.insertAdjacentHTML('afterend', html)      

8、打亂數組

在開發中混洗一組資料是你随時可能遇到的常見情況,不幸的是,JavaScript 中沒有内置數組的混洗方法。

但是,這是你可以每天使用的 shuffle one-liner:

11 個讓你驚歎的罕見 JavaScript One-Liner
const shuffle = arr => arr.sort(() => 0.5 - Math.random())      

它利用數組的排序方法,在數組的前一個元素之前或之後進行随機排序。

9、在網頁上擷取標明的文本

浏覽器在全局 windows 對象上有一個名為 getSelection 的内置方法。使用此方法,你可以建立一個單行,傳回網頁上突出顯示或標明的文本。

11 個讓你驚歎的罕見 JavaScript One-Liner
const getSelectedText = () => window.getSelection().toString()      

10、 擷取一個随機布爾值

在程式設計時,尤其是在編寫遊戲時,有時你會想要随機采取行動。在這種情況下,下面的單行非常友善。

11 個讓你驚歎的罕見 JavaScript One-Liner
const getRandomBoolean = () => Math.random() >= 0.5      

上面的單行有 50/50 的機會傳回 true 或 false。因為生成的随機數大于 0.5 的機率等于較小的機率。

但是,例如,如果你想獲得一個機率為 70% 錯誤的随機布爾值,那麼,你可以簡單地将 0.5 更改為 0.7,依此類推。

11、計算數組的平均值

可以使用多種方法計算數組的平均值。但道理對所有人都是一樣的。你必須獲得數組及其長度的總和;然後除法給出平均值。

11 個讓你驚歎的罕見 JavaScript One-Liner
const average = (arr) => arr.reduce((a, b) => a + b) / arr.length      

在平均單行中,我們使用 reduce 來擷取一行中的數組的總和,而不是使用循環。然後,我們将其除以數組長度,這是數組的平均值。

寫在最後

今天的内容,就是這樣,現在,我想你已經了解了 11 個簡單但功能強大的 JavaScript 單行程式。我試着選擇那些不是很受歡迎和知名度的東西,這樣你就可以學習新東西。我每天都在使用它們,我想對你也會有所幫助。

感謝你的閱讀,如果你喜歡它,一定要點贊,如果你對這篇文章有什麼想說的,請在留言區告訴我們。

學習更多技能

請點選下方公衆号

繼續閱讀