283 votes

Comment réduire une chaîne de caractères à N caractères en Javascript ?

Comment puis-je, en utilisant Javascript, créer une fonction qui coupera la chaîne de caractères passée comme argument, à une longueur spécifiée, également passée comme argument. Par exemple :

var string = "this is a string";
var length = 6;
var trimmedString = trimFunction(length, string);

// trimmedString should be:
// "this is"

Quelqu'un a une idée ? J'ai entendu parler de l'utilisation de substring, mais je n'ai pas bien compris.

3 votes

"c'est" = 7 caractères, c'est ce que vous vouliez ?

0 votes

Comme indiqué dans la question, je ne sais pas trop comment utiliser la sous-chaîne pour ce faire. Pourriez-vous me donner un exemple ? Je vais accepter est une réponse bien sûr, si cela fonctionne ;) @Interstellar_Coder oops, typo !

3voto

Matthew Egan Points 31

Un peu tard... Je devais répondre. C'est la façon la plus simple.

// JavaScript
function fixedSize_JS(value, size) {
  return value.padEnd(size).substring(0, size);
}

// JavaScript (Alt)
var fixedSize_JSAlt = function(value, size) {
  return value.padEnd(size).substring(0, size);
}

// Prototype (preferred)
String.prototype.fixedSize = function(size) {
  return this.padEnd(size).substring(0, size);
}

// Overloaded Prototype
function fixedSize(value, size) {
  return value.fixedSize(size);
}

// usage
console.log('Old school JS -> "' + fixedSize_JS('test (30 characters)', 30) + '"');
console.log('Semi-Old school JS -> "' + fixedSize_JSAlt('test (10 characters)', 10) + '"');
console.log('Prototypes (Preferred) -> "' + 'test (25 characters)'.fixedSize(25) + '"');
console.log('Overloaded Prototype (Legacy support) -> "' + fixedSize('test (15 characters)', 15) + '"');

Pas à pas. .padEnd - Garantit la longueur de la chaîne.

"La méthode padEnd() écrase la chaîne de caractères actuelle avec une chaîne de caractères donnée (répétée, si nécessaire) de sorte que la chaîne résultante atteigne une longueur donnée. Le remplissage est appliqué à partir de la fin (droite) de la chaîne actuelle. La source de cet exemple interactif est stockée dans un dépôt GitHub." source : developer.mozilla.org/fr/US/docs/Web/JavaScript/Référence/

.substring - limite à la longueur dont vous avez besoin

Si vous choisissez d'ajouter des ellipses, ajoutez-les à la sortie.

J'ai donné 4 exemples d'utilisations courantes de JavaScript. Je recommande vivement l'utilisation du prototype String avec surcharge pour le support historique. Cela rend l'implémentation et les modifications ultérieures beaucoup plus faciles.

0 votes

Bonjour ! Il est bon d'inclure également quelques explications sur ce qui se passe avec votre code. Étant donné la similitude de votre solution avec la réponse acceptée, peut-être qu'un petit détail sur ce que fait le padEnd fait.

0 votes

Ma solution est beaucoup plus propre et plus standardisée, et elle montre des usages multiples. La méthode padEnd() complète la chaîne de caractères actuelle avec une chaîne de caractères donnée (répétée, si nécessaire) afin que la chaîne résultante atteigne une longueur donnée. Le remplissage est appliqué à partir de la fin (à droite) de la chaîne actuelle. La source de cet exemple interactif est stockée dans un dépôt GitHub. source : developer.mozilla.org/fr/US/docs/Web/JavaScript/Référence/

1 votes

Je ne conteste pas la qualité de votre réponse. Juste une suggestion pour l'améliorer. Votre explication est géniale - éditez votre réponse et mettez-la dedans !

1voto

Olfredos6 Points 53

Une autre suggestion : supprimer les espaces blancs à la fin de la phrase.

limitStrLength = (text, max_length) => {
    if(text.length > max_length - 3){
        return text.substring(0, max_length).trimEnd() + "..."
    }
    else{
        return text
    }

0voto

Mitesh vaghela Points 436

Il existe plusieurs façons d'y parvenir

let description = "your test description your test description your test description";
let finalDesc = shortMe(description, length);

function finalDesc(str, length){

// return str.slice(0,length);

// return str.substr(0, length);

// return str.substring(0, length);

}

Vous pouvez également modifier cette fonction pour obtenir entre les chaînes de caractères.

-3voto

Babak Points 15

Je pense que vous devriez utiliser ce code :-)

    // sample string
            const param= "Hi you know anybody like pizaa";

         // You can change limit parameter(up to you)
         const checkTitle = (str, limit = 17) => {
      var newTitle = [];
      if (param.length >= limit) {
        param.split(" ").reduce((acc, cur) => {
          if (acc + cur.length <= limit) {
            newTitle.push(cur);
          }
          return acc + cur.length;
        }, 0);
        return `${newTitle.join(" ")} ...`;
      }
      return param;
    };
    console.log(checkTitle(str));

// result : Hi you know anybody ...

2 votes

Je suis curieux de savoir pourquoi vous avez ajouté cette réponse. La question a déjà une réponse acceptée et plusieurs autres réponses raisonnables, qui sont toutes plus simples que celle-ci. Ou bien votre ":-)" avait-il pour but de faire une blague ?

0 votes

Notez que la réponse acceptée est également la réponse la mieux notée. Je pense que vous essayez de résoudre un problème différent ici. (Et je ne l'avais pas remarqué en commentant plus tôt.) Ce n'est pas que ce soit un problème improbable, mais en fin de compte il n'est que légèrement lié à la question posée. Le vôtre a également l'effet étrange qu'avec l'entrée donnée, votre chaîne de sortie est 23 de caractères, plus long que le 17 paramètre par défaut plus le 4 caractères dans le suffixe " ..." . Cela semble étrange.

0 votes

Je pense aussi que cela pourrait utiliser un une mise en œuvre plus simple .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X