Comment construire/concaténer des chaînes en JavaScript ?
P粉513316221
P粉513316221 2023-08-27 19:01:23
0
2
496
<p>JavaScript prend-il en charge le remplacement/l'interpolation ? </p> <h3>Vue d'ensemble</h3> <heure /> <p>Je travaille sur un projet JavaScript et à mesure qu'il grandit, il devient de plus en plus difficile de garder les chaînes en bon état. J'aimerais savoir quelle est la manière la plus simple et la plus traditionnelle de construire ou de construire une chaîne en JavaScript. </p> <p>Mon expérience jusqu'à présent :</p> <blockquote> <p>À mesure que les projets deviennent plus complexes, la concaténation de chaînes commence à paraître moche et devient plus difficile à maintenir. </p> </blockquote> <p>La chose la plus importante à ce stade est la simplicité et la lisibilité. Pensez à un ensemble de pièces mobiles, pas seulement à 2 ou 3 variables. </p> <p>Tout aussi important, il est actuellement pris en charge par les principaux navigateurs (c'est-à-dire au moins ES5). </p> <p>Je connais l'abréviation de la connexion JavaScript : </p> <pre class="brush:php;toolbar:false;">var x = 'Bonjour'; var y = 'monde'; console.log(x + ', ' + y);</pre> <p>Il existe également la fonction String.concat. </p> <p>Je cherche quelque chose de plus propre. </p> <p>Ruby et Swift le font d'une manière intéressante. </p> <p><strong>Ruby</strong></p> <pre class="brush:php;toolbar:false;">var x = 'Bonjour' var y = 'monde' imprimer "#{x}, #{y}"</pre> <p><strong>Swift</strong></p> <pre class="brush:php;toolbar:false;">var x = "Bonjour" var y = "monde" println("(x), (y)")</pre> <p>Je pensais qu'il pourrait y avoir quelque chose de similaire en JavaScript, peut-être quelque chose comme sprintf.js. </p> <h3>Question</h3> <heure /> <p>Est-ce possible sans bibliothèque tierce ? Si non, que puis-je utiliser ? </p>
P粉513316221
P粉513316221

répondre à tous(2)
P粉244730625

Je suis déçu que personne dans les autres réponses n'explique « la meilleure façon » comme signifiant « la manière la plus rapide »...

J'ai tiré deux exemples de ici et ajouté str。 join()str.reduce() de la réponse de nishanths ci-dessus. Voici mes résultats sur Firefox 77.0.1 sous Linux.


Remarque : J'ai découvert en les testant que si je mets str = str.concat()str += directement avant ou après l'autre, le second fonctionnait toujours un peu mieux... j'ai donc effectué ces tests individuellement et commenté les autres Résultat...

Même ainsi , si je les relance, leurs vitesses changent beaucoup , j'ai donc mesuré chacun 3 fois.

1 personnage à la fois :

  • str = str.concat()841、439、956 毫秒 / 1e7 concat() 的
  • ............str +=949、1130、664 毫秒 / 1e7 +='s
  • .......[].join(): [] 中有 3350, 2911, 3522 ms / 1e7 个字符
  • ......[].reduce()[] 中的 3954、4228、4547 毫秒 / 1e7 个字符

26 cordes à la fois :

  • str = str.concat()444、744、479 毫秒 / 1e7 concat() 的
  • ............str +=1037, 473, 875 毫秒 / 1e7 +='s
  • ........[].join(): 2693, 3394, 3457 ms / 1e7 字符串在 []
  • ......[].reduce()[] 中的 2782、2770、4520 ms / 1e7 字符串

Donc, que ce soit en ajoutant 1 caractère à la fois ou 26 chaînes à la fois :

  • Gagnant clair : en gros, une égalité entre str = str.concat()str +=
  • Perdant évident : [].reduce(),然后是 [].join()

Mon code, facile à exécuter dans la console du navigateur :

{
  console.clear();

  let concatMe = 'a';
  //let concatMe = 'abcdefghijklmnopqrstuvwxyz';

  //[].join()
  {
    s = performance.now();
    let str = '', sArr = [];
    for (let i = 1e7; i > 0; --i) {
      sArr[i] = concatMe;
    }
    str = sArr.join('');
    e = performance.now();
    console.log(e - s);
    console.log('[].join(): ' + str);
  }

  //str +=
  {
    s = performance.now();
    let str = '';
    for (let i = 1e7; i > 0; --i) {
      str += concatMe;
    }
    e = performance.now();
    console.log(e - s);
    console.log('str +=: ' + str);
  }

  //[].reduce()
  {
    s = performance.now();
    let str = '', sArr = [];
    for (let i = 1e7; i > 0; --i) {
      sArr[i] = concatMe;
    }
    str = sArr.reduce(function(pre, next) {
      return pre + next;
    });
    e = performance.now();
    console.log(e - s);
    console.log('[].reduce(): ' + str);
  }

  //str = str.concat()
  {
    s = performance.now();
    let str = '';
    for (let i = 1e7; i > 0; --i) {
      str = str.concat(concatMe);
    }
    e = performance.now();
    console.log(e - s);
    console.log('str = str.concat(): ' + str);
  }

  'Done';
}
P粉412533525

Avec ES6, vous pouvez utiliser

Versions ES5 et inférieures :

  • Utilisez +opérateur

    var username = 'craig';
    var joined = 'hello ' + username;
  • chaîne de concat (..)

    var username = 'craig';
    var joined = 'hello '.concat(username);

Ou utilisez la méthode du tableau :

  • join( ..) :

    var username = 'craig';
    var joined = ['hello', username].join(' ');
  • Ou de manière plus exotique, réduire(..) combiné avec l'un des éléments ci-dessus :

    var a = ['hello', 'world', 'and', 'the', 'milky', 'way'];
    var b = a.reduce(function(pre, next) {
      return pre + ' ' + next;
    });
    console.log(b); // hello world and the milky way
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal