1
votes

Existe-t-il une méthode Javascript qui permet de concaténer les parenthèses imbriquées?

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.

Y a-t-il une fonction native Javascript (ou potentiellement JQuery) qui peut accomplir la création d'une chaîne comme celle-ci?

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.


1 commentaires

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.


5 Réponses :


2
votes

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)


0 commentaires

1
votes

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));


2 commentaires

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.



0
votes

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);
    }


0 commentaires


1
votes

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) );


0 commentaires