亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

javascript - js怎麼用遞歸的方式實現(xiàn)每隔3個數(shù)字加一個逗號?
習慣沉默
習慣沉默 2017-05-19 10:36:04
0
8
850

如234234變成234,234.求遞歸實現(xiàn),程式碼越少越好。

習慣沉默
習慣沉默

全部回覆(8)
僅有的幸福

有個超簡單的方法234234..toLocaleString()

Ty80

估計你想實現(xiàn)數(shù)字的分位顯示, "12345"這個想要顯示為"12,345", 而不是"123,45", 有的人領會錯了。
有的人給的解決方案,對於 "123456"這個數(shù)字會輸出為",123,456",明顯多了一個逗號,我的方法不會有這個問題。

1L的回答(使用 NumberObject.toLocaleString(),把數(shù)字轉(zhuǎn)換為字串,使用本地數(shù)字格式順序。)可以解決問題,但是不推薦,因為它取決於你本地的偏好設置,不同人運行結(jié)果可能不一樣。

非遞歸方式實作

也支援帶小數(shù)點的!

"12345".split('').reverse().join('').replace(/(\d{3})\B/g,',').split('').reverse().join('');  //輸出 12,345

"123456789".split('').reverse().join('').replace(/(\d{3})\B/g,',').split('').reverse().join(''); //輸出 123,456,789

"1234567.89".split('').reverse().join('').replace(/(\d{3})\B/g,',').split('').reverse().join(''); //輸出 1,234,567.89

遞歸方式實作

本問題要求用遞歸方式實現(xiàn),所以解答也提供了遞歸方式實現(xiàn)。

//只處理整數(shù)
function addComma(str, currentIndex, result) {
    if (currentIndex === undefined) {
        currentIndex = str.length - 1;
    }
    if (result === undefined) {
        result = '';
    }
    if (currentIndex < 0) {
        return result;
    }
    result = str.charAt(currentIndex) + result;
    if ((str.length - currentIndex) % 3 == 0 && currentIndex != 0) {
        result = "," + result;
    }
    return addComma(str, currentIndex - 1, result);
}

var n = '123456';
var output = addComma(n);  
console.log(output);    //輸出123,456

//帶小數(shù)的處理示例
var n = '123456.78';
var output = addComma(n.split('.')[0]) + '.' + n.split('.')[1];
console.log(output);   // 輸出 123,456.78
小葫蘆

樓上的比較好

function get(num) {
    num = num.split('').reverse().join('')
    return num.match(/\d{1,3}/g).join(',').split('').reverse().join('')
}
阿神

雷雷

伊謝爾倫
'2342342323'.match(/\d{1,3}/g).join(',') // -> 234,234,232,3

最短的程式碼來了, 看看還有沒有更短的。

Ty80

從左到右

function myFunc(str) {
    return str.split('').reverse().join('').replace(/\B(?=(?:\d{3})+\b)/g, ',').split('').reverse().join('')
}

由右到左

function myFunc(str) {
    return str.replace(/\B(?=(?:\d{3})+\b)/g, ',')
}
我想大聲告訴你
(234234+"").replace(/\B(?=(\d{3})+(?!\d))/g, ",")

前幾天有人提過這個問題 /q/10...
不過上面的方法不適用於帶小數(shù)點的,鑑於js不支持反向預查,對於帶小數(shù)點用另外一套正則吧

(234234.23132+"").replace(/\B(?=(\d{3})+(?=\.))/g, ",")

還有遞歸是什麼鬼,這個不需要用遞歸吧

PHPzhong

雷雷

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板