recherche

Maison  >  Questions et réponses  >  le corps du texte

javascript - Comment ajouter récursivement une virgule tous les 3 nombres en JS?

Par exemple, 234234 devient 234 234. En recherchant une implémentation récursive, moins il y a de code, mieux c'est.

習慣沉默習慣沉默2792 Il y a quelques jours788

répondre à tous(8)je répondrai

  • 仅有的幸福

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

    Il existe une méthode super simple 234234..toLocaleString()

    répondre
    0
  • PHP中文网

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

    Je suppose que vous souhaitez réaliser l'affichage numérique des nombres. Vous souhaitez que "12345" soit affiché sous la forme "12,345" au lieu de "123,45". Certaines personnes se sont trompées.
    La solution proposée par certaines personnes est que le nombre "123456" sera affiché sous la forme ",123,456", qui comporte évidemment une virgule supplémentaire. Ma méthode n'aura pas ce problème.

    La réponse de

    1L (utilisez NumberObject.toLocaleString(), convertissez les nombres en chaînes et utilisez la séquence de format de nombre locale.) peut résoudre le problème, mais elle n'est pas recommandée car cela dépend de vos préférences locales et les résultats peuvent être différents selon les personnes.

    Implémentation non récursive

    Prend également en charge les points décimaux !

    "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

    Implémenté de manière récursive

    Cette question nécessite une implémentation récursive, donc la réponse fournit également une implémentation récursive.

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

    répondre
    0
  • 高洛峰

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

    Celui du dessus est meilleur

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

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

    répondre
    0
  • 伊谢尔伦

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

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

    Le code le plus court est ici, voyons s'il y en a un plus court.

    répondre
    0
  • PHP中文网

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

    De gauche à droite

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

    De droite à gauche

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

    répondre
    0
  • 我想大声告诉你

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

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

    Quelqu'un a posé cette question il y a quelques jours /q/10...
    Cependant, la méthode ci-dessus ne convient pas aux points décimaux. Étant donné que js ne prend pas en charge la pré-vérification inversée, utilisez un autre ensemble de règles régulières pour les points décimaux.

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

    Et qu'est-ce que la récursivité ? Vous n'avez pas besoin d'utiliser la récursivité pour ça, n'est-ce pas ?

    répondre
    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;
        }

    répondre
    0
  • Annulerrépondre