javascript - Comment ajouter récursivement une virgule tous les 3 nombres en JS?
習慣沉默
習慣沉默 2017-05-19 10:36:04
0
8
764

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

習慣沉默
習慣沉默

répondre à tous(8)
仅有的幸福

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

Ty80

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
小葫芦

Celui du dessus est meilleur

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

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

Ty80

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, ',')
}
我想大声告诉你
(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 ?
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;
    }
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal