J'essaie de créer une chaîne à partir de l'entrée mais formatée de manière unique.
Les entrées seront des mots simples: word1
La chaîne sera vide jusqu'à ce que la première entrée arrive puis la chaîne myString
sera + (- mot1)
.
Pour la deuxième entrée: word2
, myString
doit maintenant ressembler à:
+(-word1)+(-word2)
Pour plus de clarté, une troisième entrée: word3
, myString
sera désormais:
var myString = ''; function someFunction() { ... var inputString = document.getElementById('my-input').value; myString = myString + "+(" + "-" + inputString + ")"; }
Je pense que cela va nécessiter quelque chose d'un peu plus intelligent que la concaténation de chaînes normale. Je préférerais ne pas utiliser de boucle.
Voici ce que j'ai fait
+(-word1+(-word2+(-word3)))
Cependant, cela produit
+(-word1+(-word2))
Cela a du sens car les chaînes sont juste concaténées dans la fonction, ce qui doit se passe plutôt est une sorte d'insertion. Existe-t-il une méthode Javascript qui pourrait faciliter cette insertion? Peut-être quelque chose comme l'insertion de la nouvelle chaîne à l'avant-dernier espace de la chaîne actuelle? Cependant, ce n'est pas un tableau, donc je ne connais pas les meilleures pratiques ici.
5 Réponses :
Je ne sais pas si c'est la meilleure façon de faire cela, mais vous pouvez utiliser une carte sur la liste de mots ....
const words = ['word1', 'word2', 'word3'] let result = '+' + words.map(w => `(-${w}+`).join('').replace(/\+$/, '') + ''.padStart(words.length, ')') console.log(result)
Vous recherchez la première parentèse de clôture et remplacez la valeur.
const insert = (s, v) => s ? s.replace(/(?=\))/, `+(-${v})`) : `+(-${v})`; console.log(['word1', 'word2', 'word3'].reduce(insert, undefined));
Que signifie / signifie undefined
ici?
il s'agit simplement d'une valeur erronée pour désigner le début de la structure d'imbrication.
utilisez une variable de comptage pour stocker le nombre de mots ajoutés, puis coupez la chaîne jusqu'au point où il ne reste que les crochets fermants.
insérez votre nouveau mot
ajoutez la chaîne restante
var myString = ''; var count = 0 function someFunction() { ... count++; var inputString = document.getElementById('my-input').value; myString = myString.slice(0,0-count) + "+(" + "-" + inputString + ")" + myString.slice(0-count); }
Ah, mais vous voyez, la concaténation de chaînes normale peut être assez intelligente en effet.
Rapide et sale, tout ce que vous aviez à faire était de placer + (-
entre chacun et d'ajouter les parenthèses finales. Hehe ...
arr = ['word1', 'word2', 'word3' ]; console.log( arr.map( (e) => `+(-${e}` ) + ')'.repeat(arr.length) );
Vous pouvez également utiliser .map
arr = ['word1', 'word2', 'word3' ]; console.log( '+(-' + arr.join('+(-') + ')'.repeat(arr.length) );
Le problème est que passer de
+ (- mot1 + (- mot2))
à+ (- mot1 + (- mot2 + (- mot3)))
ne peut pas être fait par concaténation, car le premier n'est pas une sous-chaîne du second. Vous devrez faire des manipulations plus compliquées. Comme vous l'avez noté, vous devrez insérer la nouvelle chaîne dans la chaîne précédente.