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

如234234變成234,234.求遞歸實現,程式碼越少越好。

習慣沉默
習慣沉默

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

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

    Ty80

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

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

    非遞歸方式實作

    也支援帶小數點的!

    "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

    遞歸方式實作

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

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

      樓上的比較好

      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...
              不過上面的方法不適用於帶小數點的,鑑於js不支持反向預查,對於帶小數點用另外一套正則吧

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

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

                PHPzhong

                雷雷

                  最新下載
                  更多>
                  網站特效
                  網站源碼
                  網站素材
                  前端模板
                  關於我們 免責聲明 Sitemap
                  PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!