javascript - Bagaimana untuk menambah koma pada setiap 3 nombor dalam js secara rekursif?
習慣沉默
習慣沉默 2017-05-19 10:36:04
0
8
694

Sebagai contoh, 234234 menjadi 234,234 Mencari pelaksanaan rekursif, lebih sedikit kod, lebih baik.

習慣沉默
習慣沉默

membalas semua(8)
仅有的幸福

Terdapat kaedah yang sangat mudah 234234..toLocaleString()

Ty80

Saya rasa anda mahu merealisasikan paparan digit nombor Anda mahu "12345" dipaparkan sebagai "12,345" dan bukannya "123,45".
Penyelesaian yang diberikan oleh sesetengah orang ialah nombor "123456" akan dikeluarkan sebagai ",123,456", yang jelas mempunyai koma tambahan kaedah saya tidak akan mempunyai masalah ini.

Jawapan

1L (gunakan NumberObject.toLocaleString(), tukar nombor kepada rentetan, dan gunakan turutan format nombor tempatan.) boleh menyelesaikan masalah, tetapi ia tidak disyorkan kerana ia bergantung pada pilihan tempatan anda dan hasilnya mungkin berbeza untuk orang yang berbeza.

Pelaksanaan bukan rekursif

Juga menyokong titik perpuluhan!

"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

Dilaksanakan secara rekursif

Soalan ini memerlukan pelaksanaan rekursif, jadi jawapannya juga menyediakan pelaksanaan rekursif.

//只处理整数
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

//带小数的处理示例
var n = '123456.78';
var output = addComma(n.split('.')[0]) + '.' + n.split('.')[1];
console.log(output);   // 输出 123,456.78
小葫芦

Yang kat atas lagi best

function get(num) {
    num = num.split('').reverse().join('')
    return num.match(/\d{1,3}/g).join(',').split('').reverse().join('')
}
阿神
function addComma(str) {
    if(str.length <= 3) {
        return str;
    }
    var res = str.split("");
    var resStr = res.splice(0, 3);
    return resStr.join("") + "," + addComma(res.join(""));
}
伊谢尔伦
'2342342323'.match(/\d{1,3}/g).join(',') // -> 234,234,232,3

Kod terpendek ada di sini, mari lihat jika ada yang lebih pendek.

Ty80

Dari kiri ke kanan

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

Dari kanan ke kiri

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

Seseorang bertanya soalan ini beberapa hari yang lalu /q/10...
Walau bagaimanapun, kaedah di atas tidak sesuai untuk titik perpuluhan Memandangkan js tidak menyokong prasemakan terbalik, gunakan satu set peraturan biasa untuk titik perpuluhan.

(234234.23132+"").replace(/\B(?=(\d{3})+(?=\.))/g, ",")
Dan apa itu rekursi Anda tidak perlu menggunakan rekursi untuk ini, bukan?
PHPzhong
    comdify : function (n){
      var re=/\d{1,3}(?=(\d{3})+$)/g;
      var n1 = String(n).replace(/^(\d+)((\.\d+)?)$/,function(s,s1,s2){return s1.replace(re,"$&,")+s2;});
      return n1;
    }
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!