cari

Rumah  >  Soal Jawab  >  teks badan

javascript - Bagaimana untuk menambah koma pada setiap 3 nombor dalam js secara rekursif?

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

習慣沉默習慣沉默2808 hari yang lalu799

membalas semua(8)saya akan balas

  • 仅有的幸福

    仅有的幸福2017-05-19 10:38:04

    Terdapat kaedah yang sangat mudah 234234..toLocaleString()

    balas
    0
  • PHP中文网

    PHP中文网2017-05-19 10:38:04

    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

    balas
    0
  • 高洛峰

    高洛峰2017-05-19 10:38:04

    Yang kat atas lagi best

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

    balas
    0
  • 阿神

    阿神2017-05-19 10:38:04

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

    balas
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-19 10:38:04

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

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

    balas
    0
  • PHP中文网

    PHP中文网2017-05-19 10:38:04

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

    balas
    0
  • 我想大声告诉你

    我想大声告诉你2017-05-19 10:38:04

    (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?

    balas
    0
  • PHPz

    PHPz2017-05-19 10:38:04

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

    balas
    0
  • Batalbalas