javascript黑科技之高效填充
前兩天看了下導致react、babel打包失敗的left-pad 14行原始碼,的確是存在黑科技啊,可以把填充縮短到只填充2的n次方中的n次。其中還有關於位運算子的運用,很好很強大。
不過由於太簡單了,程式碼太少,所以運用場景比較單一,一些複雜場景也不能返回正確想要達到的值。我就在這基礎上進行了最佳化,並且給出了位操作的替代處理方案,效率和原始碼一樣。以下是相關程式碼,並在github上附上了對應的單元測試:
/**
* Created by lenovo on 2017/6/13.
*/
/**
* 高效填充字元函式(填充次數為2的n次方中的n次)
* @param {string} str 待填充的字串
* @param {number} len 填充後的長度
* @param {any} ch 填充物,可以單個字元,也可以多個字元。
* @param {any} direct 填充位置(r: 右填充,其他:左填充)
*/
function pad(str, len, ch, direct) {
var left = '', //超出的填充字元
pad = '', // 完整填充字元
ch = ch + ''; //填充物
//完整填充字元
len = len - str.length;
// 1、填充長度必須大於0,否則返回原字串,例如(pad('aa', 0, 'tabca'))
if (!(len >= 0)) return str;
if (ch.length > 0 && len % ch.length !== 0) {
console.log(222)
//2、不能正好完整填充,則會有超出的填充字元,例如(pad('aa', 7, 'tabc'))
left = ch.slice(0, len % ch.length);
}
// 3、獲取實際填充長度,如果超過一個字元,填充次數會相應除去,例如(pad('aa', 7, 't')和2)
len = Math.floor(len / (ch.length));
while(true) {
// 4、長度如果為偶數,則直接對摺加如果不是,最後長度為0也會進入該函式,例如(pad('aa', 10, 'taca')和2)
if (len % 2) pad += ch;// if (len & 1) pad += ch;
len >>= 1;// len = Math.floor(len / 2);
if (len) ch += ch;
else break;
}
// 5、預設為左填充,如果想右填充則direct傳'r',例如(pad('aa', 7, 't','r')和2)
if (direct === 'r') {
return str + pad + left;
} else {
return left + pad + str;
}
}
module.exports = pad;
github地址:
上面有詳細的單元測試,歡迎大家fork。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2249/viewspace-2807842/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 安卓黑科技之HOOK詳解安卓Hook
- 黑科技開戶神器黑科技開戶神器黑科技開戶神器黑科技開戶神器黑科技開戶神器
- JavaScript 最新特性實現的三大黑科技JavaScript
- 足球黑科技之AI與足球智慧分析AI
- 五款高效率黑科技神器工具,炸裂好用,省時間
- 前端黑科技:使用 JavaScript 實現網頁掃碼功能前端JavaScript網頁
- 2019前端必會黑科技之PWA前端
- 分享行業“黑科技”行業
- 黑袋子——一個擁有黑科技的APPAPP
- 幾個CSS的黑科技CSS
- CSS黑科技補充篇CSS
- JavaScript 各種遍歷方式詳解,有你不知道的黑科技JavaScript
- JavaScript中的“黑話”JavaScript
- 黑科技微軟HoloLens五大不足之處微軟
- Laravel 黑科技:Eloquent 裡的 withCountLaravel
- Python黑科技:FuckIt.pyPython
- 黑科技:LocalStorage 快取機制快取
- 高效的 JavaScriptJavaScript
- 強化工控網路安全 綠盟科技竟祭出黑科技!
- 史上最全的谷歌公司那些黑科技谷歌
- [Web翻譯]JavaScript中的編譯與填充WebJavaScript編譯
- 物聯網小課堂之NB-IoT黑科技——低功耗技術
- 精讀《高效 javascript》JavaScript
- 為什麼總有人黑 JavaScript?JavaScript
- 如何用好 Go 的測試黑科技Go
- 4. 黑科技 Interface |《 刻意學習 Golang 》Golang
- 【黑科技】React-canvas助力HTML5ReactCanvasHTML
- 這5款黑科技app用了就上癮APP
- 「黑科技」無人機殺手——無彈步槍DroneDefender無人機
- Flutter黑科技一鍵開啟資原始檔Flutter
- 曲線救國:webpack打包優化黑科技Web優化
- 前端必知必會--操作URL的黑科技前端
- 聯想ThindPad用上Optane硬碟 Intel最新黑科技硬碟Intel
- 這些JavaScript程式設計黑科技,裝逼指南,高逼格程式碼,讓你驚歎不已JavaScript程式設計
- 高效能Javascript:高效的資料訪問JavaScript
- 黑科技來襲 | 贏效寶將受眾精準定位在百米之內
- 編寫高效能JavaScriptJavaScript
- 網頁前端黑科技PWA的優劣對比網頁前端