欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JS格式化數(shù)字(每三位加逗號)的方法總結(jié)

 更新時間:2022年06月27日 09:50:32   作者:小旭2021  
這篇文章總結(jié)了JS格式化數(shù)字(每三位加逗號)的幾種方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

方法一

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('');
}

方法一的執(zhí)行過程就是把數(shù)字轉(zhuǎn)換成字符串后,打散為數(shù)組,再從末尾開始,逐個把數(shù)組中的元素插入到新數(shù)組(result)的開頭。每插入一個元素,counter就計一次數(shù)(加1),當(dāng)counter為3的倍數(shù)時,就插入一個逗號,但是要注意開頭(i為0時)不需要逗號。最后通過調(diào)用新數(shù)組的join方法得出結(jié)果。
方法一比較清晰易懂,也在項目中用了一段時間。但是直覺告訴我,它的性能并不好。

 方法二

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;
}

方法二是方法一的改良版,不把字符串打散為數(shù)組,始終對字符串操作。

方法三 - 循環(huán)匹配末尾的三個數(shù)字

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;
}

方法三是完全不同的算法,通過正則表達式循環(huán)匹配末尾的三個數(shù)字,每匹配一次,就把逗號和匹配到的內(nèi)容插入到結(jié)果字符串的開頭,然后把匹配目標(biāo)(num)賦值為還沒匹配的內(nèi)容(RegExp.leftContext)。此外,還要注意:

1.如果數(shù)字的位數(shù)是3的倍數(shù)時,最后一次匹配到的內(nèi)容肯定是三個數(shù)字,但是最前面的三個數(shù)字前不需要加逗號;
2.如果數(shù)字的位數(shù)不是3的倍數(shù),那num變量最后肯定會剩下1到2個數(shù)字,循環(huán)過后,要把剩余的數(shù)字插入到結(jié)果字符串的開頭。

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

方法四 - 方法三的字符串版

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+/, '');
}

先把數(shù)字的位數(shù)補足為3的倍數(shù),通過正則表達式,將其切割成每三個數(shù)字一個分組,再通過join方法添加逗號,最后還要把補的0移除。

方法六 - 懶人法

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

一直覺得這個格式化是可以通過一條正則表達式替換做出來的,但是需要用到斷言等寫法,無奈自己對這部分不太熟。Google了一下,還真找到了這么一條正則表達式,這估計是代碼最短的實現(xiàn)。

到此這篇關(guān)于JS格式化數(shù)字的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 動態(tài)加載js文件簡單示例

    動態(tài)加載js文件簡單示例

    這篇文章主要介紹了動態(tài)加載js文件的方法,結(jié)合實例形式簡單分析了JavaScript動態(tài)加載的實現(xiàn)技巧,需要的朋友可以參考下
    2016-04-04
  • 微信小程序?qū)崿F(xiàn)星級評價效果

    微信小程序?qū)崿F(xiàn)星級評價效果

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)星級評價效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • JavaScript操作URL的相關(guān)內(nèi)容集錦

    JavaScript操作URL的相關(guān)內(nèi)容集錦

    這篇文章主要介紹了JavaScript操作URL的相關(guān)內(nèi)容集錦的相關(guān)資料,需要的朋友可以參考下
    2015-10-10
  • js的Boolean對象初始值示例

    js的Boolean對象初始值示例

    Boolean(邏輯)對象用于將非邏輯值轉(zhuǎn)換為邏輯值(true 或者 false)下面為大家介紹下js的Boolean對象初始值
    2014-03-03
  • 原生js+canvas實現(xiàn)下雪效果

    原生js+canvas實現(xiàn)下雪效果

    這篇文章主要為大家詳細(xì)介紹了原生js+canvas實現(xiàn)下雪效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • js驗證表單第二部分

    js驗證表單第二部分

    js驗證表單第二部分...
    2006-11-11
  • 微信小程序?qū)崿F(xiàn)走馬燈式抽獎

    微信小程序?qū)崿F(xiàn)走馬燈式抽獎

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)走馬燈式抽獎,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 前端技巧之js-md5的簡單使用方法

    前端技巧之js-md5的簡單使用方法

    這篇文章主要給大家介紹了關(guān)于前端技巧之js-md5的簡單使用,js-md5是一種前端加密算法,用于在前端對密碼等敏感信息進行加密,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • 原生JavaScript之es6中Class的用法分析

    原生JavaScript之es6中Class的用法分析

    這篇文章主要介紹了原生JavaScript之es6中Class的用法,結(jié)合實例形式對比分析了es6與es5相關(guān)class定義、區(qū)別及使用技巧,需要的朋友可以參考下
    2020-02-02
  • 微信小程序“搖一搖”的實例代碼

    微信小程序“搖一搖”的實例代碼

    微信小程序并沒有提供搖一搖API接口,但是提供了一個重力感應(yīng)的API,接下來我們可以用這個方法來模擬微信搖一搖功能,具體實現(xiàn)代碼,大家參考下本文
    2017-07-07

最新評論