Aujourd'hui, je pratiquais la question sur freecodecamp, et j'ai rencontré une question sur l'inversion des cordes. Inversion d'une chaîne est l'une des questions d'entrevue courantes en JavaScript. Peut-être que l'intervieweur vous donnera une chaîne "Hello Word!", Qui vous permettra de le transformer en "! Drow Olleh" via JavaScript.
Je suis aussi un débutant. J'ai réussi le test en utilisant les connaissances liées aux tableaux que j'ai appris auparavant et aux conseils sur les questions. Plus tard, je me suis demandé, y a-t-il un autre moyen de résoudre ce problème? Après la recherche, il existe encore de nombreuses méthodes. Voici quelques-unes de ces méthodes pour une utilisation ultérieure.
Des choses à faire
Des choses que nous voulons faire:
Avant d'affichage de la chaîne fournie en sens inverse avant la chaîne inverse, vous devez convertir la chaîne en un tableau et le résultat final est toujours une chaîne.
Ensuite, jetons un coup d'œil sur les méthodes qui peuvent réaliser les exigences ci-dessus.
En utilisant des fonctions intégrées
Dans les exercices, nous sommes invités à utiliser trois méthodes pour afficher avec succès une chaîne à l'envers:
String.prototype.split () array.prototype.reverse () array.prototype.join ()
Parcourez-le brièvement:
La méthode Split () divise chaque caractère d'un objet de chaîne et traite chaque chaîne comme chaque élément d'un tableau, inverse () la méthode pour modifier le tableau, organise les éléments dans le tableau dans l'ordre inverse, le premier élément de tableau devient le dernier, et le dernier devient la première méthode join () relie tous les éléments dans le tableau en une chaîne,
Jetons un coup d'œil à un exemple:
fonction reversestring (str) {// La première étape consiste à utiliser la méthode Split () pour renvoyer un nouveau tableau // var splitString = "Bonjour" .split (""); var splitstring = str.split (""); // diviser la chaîne // renvoie un nouveau tableau ["H", "E", "L", "L", "L", "O"] // La deuxième étape consiste à utiliser la méthode Reverse () pour créer un nouveau tableau // var réverseArray = [H "," E "," L "," L "," O "]. var reverseArray = splitString.reverse (); // Les éléments du tableau d'origine sont inversés en séquence ["o", "l", "l", "e", "h"] // La troisième étape consiste à utiliser la méthode join () pour rejoindre chaque élément du tableau et le combiner dans une nouvelle chaîne // var joinarray = ["o", "l", "l", "e", "h"]. var joinArray = reversearray.join (""); // "olleh" // La quatrième étape consiste à renvoyer une nouvelle chaîne qui est inversée. retourner joinArray; // "olleh"} reversestring ("bonjour"); // => ollehSimplifiez la méthode ci-dessus et peut être écrite comme ceci:
fonction reversestring (str) {return str.split (""). reverse (). join ("");} reversestring ("bonjour"); // => ollehInversez la chaîne à l'aide d'une traversée de boucle décroissante
Cette méthode utilise une for pour effectuer une traversée décrémentée dans la chaîne d'origine, puis remerger la chaîne traversée dans une nouvelle chaîne:
fonction reversestring (str) {// Étape 1: Créez une chaîne vide pour stocker la chaîne nouvellement créée var newstring = ""; // Étape 2: Utilisez la boucle pour la boucle // commence à diminuer la traversée de str.length-1 jusqu'à ce que je soit supérieur ou égal à 0, la boucle continuera // str.length - 1 correspond au dernier caractère de la chaîne o pour (var i = str.length - 1; i> = 0; i--) {newstring + = str [i]; // ou newstring = newstring + str [i]; } // Étape 3: Renvoie la nouvelle de retour de chaîne inversée; } reversestring ('hello'); // => // "olleh"Un aperçu simple du processus de traversée de cordes. Supposons que vous deviez inverser la chaîne "bonjour". L'ensemble du processus de traversée est présenté dans le tableau suivant:
i correspondant En fait, la boucle for ci-dessus peut également être remplacée par while :
fonction reversestring (str) {var newstring = ''; var i = str.length; while (i> 0) {newstring + = str.substring (i - 1, i); je--; } return newstring;} reversestring ("bonjour"); // => olleh Méthode substring() dans while . substring() renvoie une sous-chaîne entre deux index de la chaîne (ou à la fin de la chaîne).
Implémentez l'inversion de la chaîne à l'aide de la récursivité
Une chaîne peut également être inversée à l'aide String.prototype.substr() et String.prototype.charAt() .
substr() renvoie une sous-chaîne dans la chaîne à partir de la position spécifiée à la longueur spécifiée. Par exemple:
var str = "abcdefghij"; console.log ("(1,2):" + str.substr (1,2)); // (1,2): bcdefghijconsole.log ("(- 3,2):" + str.substr (-3,2)); // (-3,2): hiconsole.log ("(- 3):" + str.substr (-3)); // (-3): hijconsole.log ("(1):" + str.substr (1)); // (1): bcdefghijconsole.log ("(- 20, 2):" + str.substr (-20, 2)); // (-20, 2): abconsole.log ("(20, 2):" + str.substr (20, 2)); // (20, 2): charAt() renvoie le caractère à la position spécifiée dans la chaîne. Les caractères de la chaîne sont indexés de gauche à droite, le premier caractère a une valeur d'index de 0 et le dernier caractère (en supposant que le caractère est dans la chaîne stringName ) a une valeur d'index de stringName.length - 1 . Si la valeur index spécifiée est en dehors de cette plage, une chaîne vide est renvoyée.
var anystring = "Brave New World"; console.log ("Le caractère à l'index 0 est '" + anystring.charat (0) + "'"); // => Le caractère à l'index 0 est 'b'console.log ("Le caractère à l'index 1 est'" + anystring.charat (1) + "'"); // => Le caractère à l'index 1 est 'r'console.log ("le caractère à l'index 2 est'" + anystring.charat (2) + "'"); // => Le caractère à l'index 2 est 'a'console.log ("Le caractère à l'index 3 est'" + anystring.charat (3) + "'"); // => Le caractère à l'index 3 est 'v'console.log ("le caractère à l'index 4 est'" + anystring.charat (4) + "'"); // => Le caractère à l'index 4 est 'e'console.log ("le caractère à l'index 999 est'" + anyString.charat (999) + "'"); // => Le caractère à l'index 999 est ''Combiné, nous pouvons le faire pour implémenter l'inversion de la chaîne:
fonction reversestring (str) {if (str === "") {return ""; } else {return reversestring (str.substr (1)) + str.charat (0); }} reversestring ("Bonjour"); // => ollehLa première partie de la méthode récursive. Vous devez vous rappeler que vous ne l'appellerez pas une fois, vous aurez plusieurs appels imbriqués.
Partie 2 Méthode récursive.
La méthode ci-dessus peut être encore améliorée et changée en un opérateur ternaire
fonction reversestring (str) {return (str === '')? '': ReverseString (str.substr (1)) + str.charat (0);} reversestring ("bonjour"); // => ollehIl peut également être modifié en cette méthode
fonction reversestring (str) {return str && reversestring (str.substr (1)) + str [0];} reversestring ("bonjour"); // => ollehAutres méthodes
En plus des méthodes ci-dessus, il existe en fait d'autres méthodes:
Méthode 1 Le code de code de copie est le suivant: function reverseString (str) { var newString = []; for (var i = str.length - 1, j = 0; i >= 0; i--, j++) { newString[j] = str[i]; } return newString.join('');}reverseString("hello"); // => olleh 2 est le suivant: function reverseString (str) { for (var i = str.length - 1, newString = ''; i >= 0; newString += str[i--] ) { } return newString;}reverseString("hello"); // => olleh est le suivant: function reverseString (str) { function rev(str, len, newString) { return (len === 0) ? newString : rev(str, --len, (newString += str[len])); } return rev(str, str.length, '');}reverseString("hello"); // =>olleh est le suivant: function reverseString (str) { str = str.split(''); var len = str.length, halfIndex = Math.floor(len / 2) - 1, newString; for (var i = 0; i <= halfIndex; i++) { newString = str[len - i - 1]; str[len - i - 1] = str[i]; str[i] = newString; } return str.join('');}reverseString("hello"); // => olleh Five Copy Code Code est la suivante: function reverseString (str) { if (str.length < 2) { return str; } var halfIndex = Math.ceil(str.length / 2); return reverseString(str.substr(halfIndex)) + reverseString(str.substr(0, halfIndex));}reverseString("hello"); // =>olleh est le suivant: function reverseString(str) { return [].reduceRight.call(str, function(prev, curr) { return prev + curr; }, '');}reverseString("hello"); // =>olleh ES6
Dans ES6, il peut être rendu plus simple, comme:
[...str].reverse().join('');
ou [...str].reduceRight( (prev, curr) => prev + curr );
ou:
const reverse = str => str && reverse(str.substr(1)) + str[0];
L'inversion de chaîne est un algorithme petit et simple, comme mentionné précédemment, et est souvent utilisé pour interviewer JavaScript de base. Vous pouvez utiliser les méthodes ci-dessus pour résoudre ce problème, ou même utiliser des solutions plus complexes. Si vous avez une meilleure façon, veuillez l'ajouter dans les commentaires ci-dessous et le partager avec nous.