首頁 web前端 js教程 JS實作的4種數位千位符格式化方法分享_javascript技巧

JS實作的4種數位千位符格式化方法分享_javascript技巧

May 16, 2016 pm 04:11 PM
js 數位 格式化

所謂的數字千分位形式,即從個位數起,每三位之間加一個逗號。例如“10,000”。針對這個需求,我起初寫了這樣一個函數:

複製程式碼 程式碼如下:

// 方法一
function toThousands(num) {
    var result = [ ], counter = 0;
    num = (num || 0).toString().split('');
    for (var i = num.length - 1; i >= 0; i--) {
        counter ;
        result.unshift(num[i]);
        if (!(counter % 3) && i != 0) { result.unshift(','); }
    }
    return result.join('');
}

方法一的執行過程就是把數字轉換成字串後,打散為數組,再從最後開始,逐一把數組中的元素插入到新數組(result)的開頭。每插入一個元素,counter就計一次數(加1),當counter為3的倍數時,就插入一個逗號,但是要注意開頭(i為0時)不需要逗號。最後透過呼叫新數組的join方法得出結果。

方法一比較清晰易懂,也在專案中用了一段時間。但是直覺告訴我,它的表現並不好。

方法二-方法一的字串版

複製程式碼 程式碼如下:

// 方法二
function toThousands(num) {
    var result = '', counter = 0;
    num = (num || 0).toString();
    for (var i = num.length - 1; i >= 0; i--) {
        counter ;
        result = num.charAt(i) result;
        if (!(counter % 3) && i != 0) { result = ',' result; }
    }
    return result;
}

方法二是方法一的改良版,不把字串打散為數組,始終對字串運算。

方法三——循環匹配末尾的三個數字

複製程式碼 程式碼如下:

// 方法三
function toThousands(num) {
    var num = (num || 0).toString(), re = /d{3}$/, result = '';
    while ( re.test(num) ) {
        result = RegExp.lastMatch result;
        if (num !== RegExp.lastMatch) {
            result = ',' result;
            num = RegExp.leftContext;
        } else {
            num = '';
            break;
        }
    }
    if (num) { result = num result; }
    return result;
}

方法三是完全不同的演算法,透過正規表示式循環匹配末尾的三個數字,每匹配一次,就把逗號和匹配到的內容插入到結果字串的開頭,然後把匹配目標(num)賦值為還沒符合的內容(RegExp.leftContext)。另外,也要注意:

1.如果數字的位數是3的倍數時,最後一次匹配到的內容肯定是三個數字,但是最前面的三個數字前不需要加逗號;
2.如果數字的位數不是3的倍數,那num變數最後一定會剩下1到2個數字,循環過後,要把剩餘的數字插入到結果字串的開頭。

雖然方法三減少了循環次數(一次循環處理三個字元),但由於用到了正則表達式,一定程度上增加了消耗。

方法四-方法三的字串版

複製程式碼 程式碼如下:

// 方法四
function toThousands(num) {
    var num = (num || 0).toString(), result = '';
    while (num.length > 3) {
        result = ',' num.slice(-3) result;
        num = num.slice(0, num.length - 3);
    }
    if (num) { result = num result; }
    return result;
}

事實上,截取末尾三個字元的函數可以透過字串類型的slice、substr或substring方法來做到。這樣就可以避免使用正規表示式。

方法五-分組合併法

複製程式碼 程式碼如下:

// 方法五
function toThousands(num) {
    var num = (num || 0).toString(), temp = num.length % 3;
    switch (temp) {
        case 1:
            num = '00' num;
            break;
        case 2:
            num = '0' num;
            break;
    }
    return num.match(/d{3}/g).join(',').replace(/^0 /, '');
}

先把數字的位數補足為3的倍數,透過正規表示式,將其切割成每三個數字一個分組,再透過join方法加上逗號,最後還要把補的0移除。

方法六-懶人法

複製程式碼 程式碼如下:

// 方法六
function toThousands(num) {
    return (num || 0).toString().replace(/(d)(?=(?:d{3}) $)/g, '$1,');
}

一直覺得這個格式化是可以透過一條正規表示式替換做出來的,但是需要用到斷言等寫法,無奈自己對這部分不太熟。 Google了一下,還真找到了這麼一條正規表示式,這估計是程式碼最短的實作。

測試結果

数字 执行5000次消耗的时间(ms)
方法一 方法二 方法三 方法四 方法五 方法六
1 4 1 3 1 14 2
10 14 1 3 0 7 2
100 12 1 2 4 5 3
1000 13 2 3 2 9 5
10000 21 4 3 1 6 3
100000 21 3 2 1 5 6

方法一和方法二的強烈對比表明,字串操作的效率比數組操作的效率要高得多;方法六的測試結果告訴我們,代碼長短跟性能高低沒有關係。方法四的綜合性能是最好的(但為何num為100的時候,性能有所降低呢,這個實在不解),主要原因是:

1.對比方法一、二,每次操作3個字符而不是1個字符,減少循環次數;
2.對比方法三、五、六,沒有使用正規表示式,減少了消耗。

最後,我選擇了方法四作為最終的最佳化方案。各位讀者如有較好的實作方法或改良意見,可以發表評論。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

dos指令怎麼格式化c盤 dos指令怎麼格式化c盤 Feb 19, 2024 pm 04:23 PM

DOS命令是Windows作業系統中使用的命令列工具,它可以用來執行各種系統管理任務和操作。其中一個常用的任務是格式化硬碟,包括C碟。格式化C碟是一個比較危險的操作,因為它將會清除C碟上的所有數據,並將檔案系統重新初始化。在執行這個操作之前,請確保你已經備份了重要的文件,並且清楚地了解格式化操作對你的電腦會產生的影響。下面是在DOS命令列中格式化

建議:優秀JS開源人臉偵測辨識項目 建議:優秀JS開源人臉偵測辨識項目 Apr 03, 2024 am 11:55 AM

人臉偵測辨識技術已經是一個比較成熟且應用廣泛的技術。而目前最廣泛的網路應用語言非JS莫屬,在Web前端實現人臉偵測辨識相比後端的人臉辨識有優勢也有弱勢。優點包括減少網路互動、即時識別,大大縮短了使用者等待時間,提高了使用者體驗;弱勢是:受到模型大小限制,其中準確率也有限。如何在web端使用js實現人臉偵測呢?為了實現Web端人臉識別,需要熟悉相關的程式語言和技術,如JavaScript、HTML、CSS、WebRTC等。同時也需要掌握相關的電腦視覺和人工智慧技術。值得注意的是,由於Web端的計

手機格式化恢復方法大揭密(手機故障?別急) 手機格式化恢復方法大揭密(手機故障?別急) May 04, 2024 pm 06:01 PM

現今,無法開機等,卡頓,我們難免會遇到一些問題,例如係統崩潰、但在使用過程中、手機已成為我們生活中不可或缺的一部分。我們往往束手無策、有時、對於這些問題的解決方法。幫助你解決手機故障,本文將為大家介紹一些手機格式化恢復的方法、讓手機重新恢復正常運作。備份資料-保護重要資訊安全通訊錄等,如照片、聯絡人、以免在格式化過程中遺失、在進行手機格式化之前、首先要考慮的是備份手機上的重要資料和檔案。確保資料的安全性、或選擇將檔案傳輸至雲端儲存服務中,可以透過連接電腦進行備份。使用系統自備恢復功能-簡

格式化筆記型電腦會使其速度更快嗎? 格式化筆記型電腦會使其速度更快嗎? Feb 12, 2024 pm 11:54 PM

格式化筆記型電腦會使其速度更快嗎?如果您想格式化您的Windows筆記型電腦,但想知道它是否會使速度更快,本文將幫助您了解這個問題的正確答案。格式化筆記型電腦會使其速度更快嗎?使用者格式化Windows筆記型電腦的原因有很多。但最常見的原因是筆記型電腦的效能或速度緩慢。格式化筆記型電腦會徹底刪除C碟或安裝Windows作業系統的硬碟分割區上儲存的所有資料。因此,每個用戶在採取這一步驟之前都會三思而後行,尤其是在筆記型電腦的性能方面。本文將幫助您了解格式化筆記型電腦是否會加快速度。格式化筆記型電腦有助於

html格式化的方法有哪些 html格式化的方法有哪些 Mar 08, 2024 am 09:53 AM

html格式化方法:1、使用線上HTML格式化工具;2、使用程式碼編輯器自帶的HTML格式化快速鍵,如Visual Studio Code中的Shift + Alt + F;3、使用插件,如Sublime Text中的HTML/CSS/JS Prettify插件;4、使用命令列工具,如HTML Tidy;5、手動格式化,依照編碼規格和習慣手動格式化。

js和vue的關係 js和vue的關係 Mar 11, 2024 pm 05:21 PM

js和vue的關係:1、JS作為Web開發基石;2、Vue.js作為前端框架的崛起;3、JS與Vue的互補關係;4、JS與Vue的實踐應用。

怎麼把win10系統格式化重裝系統_把win10系統格式化重裝系統教學課程 怎麼把win10系統格式化重裝系統_把win10系統格式化重裝系統教學課程 Mar 21, 2024 pm 04:56 PM

現在win10系統電腦安全會受到很多病毒與程式的威脅,我們拿一個典型的例子來說,他在上網時會無意點開一個連接或著是網站,之後我們電腦就莫名其妙的彈出一些很煩人的廣告或是電腦卡在介面動不了,這就很可能是被惡意捆綁安裝了某些軟體了,還有一個情況就是電腦中病毒了。如果出現這種問題,我們就可以給win10系統電腦重裝系統,他可以有效去除掉系統盤裡的病毒程序,現在下面小編就帶大家win10系統格式化重裝系統方法,大家一起往下看。 1.怎麼把win10系統格式化重裝系統呢,首先我們點選「開始」-

方法:將Json檔案內容格式化 方法:將Json檔案內容格式化 Feb 18, 2024 am 11:41 AM

Json檔案格式化的方法Json(JavaScriptObjectNotation)是一種輕量級的資料交換格式,廣泛用於Web應用和行動應用的資料傳輸和儲存。 Json檔案以結構化的方式儲存數據,使得數據的解析和使用變得非常方便。然而,有時候我們可能會遇到Json檔案格式錯亂或不易閱讀的情況。在這種情況下,我們可以使用Json檔案格式化的方法來優化Jso

See all articles