Disons que j'ai une phrase et un éventail de mots: Comment puis-je remplacer chaque astérisque (*) avec le mot approprié dans le tableau donné?
Mais disons également qu'il y a de cas où il y a plus d'astérisques que des éléments de la matrice: p> utilise regex le seul moyen de résoudre ce problème ou existe-t-il une solution JS vanilla? p> p>
5 Réponses :
let sentence = 'My * is * years old.'; let words = ['dog', 3]; let count =0; while (sentence.indexOf('*') > -1) { sentence = sentence.replace('*', words[count++]); if (count >= words.length) count = 0; } console.log(sentence);
Vous pouvez prendre une fonction de remplacement avec une valeur supplémentaire pour l'index de démarrage, qui a une valeur par défaut de zéro.
pour garder l'index dans une plage valide, vous pouvez prendre le Opérateur de reste % code>
avec le Longueur de la matrice. p>
p>
const replace = (string, array, i = 0) => string.replace(/\*/g, _=> array[i++ % array.length]); console.log(replace('My * is * years old.', ['dog', 3])); console.log(replace('The soldiers marched *, *, *, *.', ['left', 'right']));
Je pensais à un départ avec un décalage pour l'index. (à côté de la déclaration et d'initialiser une variable nécessaire.)
Si vous n'aimez vraiment pas les expressions régulières, vous pouvez le faire:
init | "The soldiers marched *, *, *, *." split | ["The soldiers marched ", ", ", ", ", ", ", "."] i = 0 | ["The soldiers marched ", ", ", ", ", ", ", "."] i = 1 | ["The soldiers marched ", "left, ", ", ", ", ", "."] i = 2 | ["The soldiers marched ", "left, ", "right, ", ", ", "."] i = 3 | ["The soldiers marched ", "left, ", "right, ", "left, ", "."] i = 4 | ["The soldiers marched ", "left, ", "right, ", "left, ", "right."] join | "The soldiers marched left, right, left, right."
Une autre option libre REGEXP: méfiez-vous du code malveillant cependant: p> > | f(["L", "R"])
< | "", alert("VIRUS ATTACK!!! CALL +XX-XXXXX-XXXXX NOW!!!"), "The soldiers marched L, R, L, R."
Un caractère après l'autre:
p>
abc = ["A", "B", "C"] for (i = 0; i < 2 * abc.length; i++) { // j will never reach abc.length j = i % abc.length; // 0, 1, 2, 0, ... console.log(i, j, abc[j]); }
Avez-vous essayé quelque chose du tout? Oui, il est possible avec Vanilla JS.
Regex est intégré à JS, donc c'est Vanilla JS. Quelle solution avez-vous proposé qui utilise regex? Il peut être possible de le réutiliser afin qu'il n'utilise pas regex.
À l'avenir, veuillez ne pas ajouter de balises aux questions qui ne correspondent pas à votre question. J'ai supprimé la balise de programmation fonctionnelle, car cela n'a rien à voir avec la programmation fonctionnelle. Vous pouvez survoler une balise pour obtenir une brève description de ce que c'est à propos. Comprenez que de nombreux utilisateurs réguliers du site suivent certaines tags, et nous pouvons obtenir un peu de grincheux sur les questions qui ne sont pas gernées à nos intérêts. Deuxièmement, et beaucoup moins important encore, les regexnes sont i> vanilla js :)