Hoje eu estava praticando a pergunta no Freecodecamp e encontrei uma pergunta sobre inversão de string. A reversão de uma string é uma das perguntas comuns da entrevista em JavaScript. Talvez o entrevistador lhe dê uma string "Hello Word!", O que permitirá que você a transforme em "! Drow Olleh" através do JavaScript.
Eu também sou iniciante. Passei no teste usando o conhecimento relacionado às matrizes que aprendi antes e as dicas sobre as perguntas. Mais tarde, eu me perguntava: existe outra maneira de resolver esse problema? Depois de pesquisar, ainda existem muitos métodos. Aqui estão alguns desses métodos para uso posterior.
Coisas para fazer
Coisas que queremos fazer:
Antes de exibir a string fornecida ao reverso antes da sequência reversa, você precisa converter a string em uma matriz e o resultado final ainda é uma string.
Em seguida, vamos dar uma olhada em quais métodos podem atingir os requisitos acima.
Usando funções internas
Nos exercícios, somos solicitados que possamos usar três métodos para exibir uma string com êxito ao contrário:
String.prototype.split () Array.prototype.Veverse () Array.prototype.join ()
Basta passar por isso brevemente:
O método split () divide cada caractere de um objeto de string e trata cada string como cada elemento de uma matriz, reverte () para alterar a matriz, organiza os elementos da matriz em ordem inversa, o primeiro elemento da matriz se torna o último e o último se torna o primeiro método de junção () conecta todos os elementos da matriz em uma string em uma string ()
Vamos dar uma olhada em um exemplo:
função reversestring (str) {// A primeira etapa é usar o método split () para retornar uma nova matriz // var splitString = "hello" .split (""); var splitString = str.split (""); // divide a string // retorna uma nova matriz ["h", "e", "l", "l", "l", "o"] // O segundo passo é usar o método reverso () para criar uma nova matriz // var reversearray = ["h", "e" l "l" l "," o "]. var reversearray = splitString.Reverse (); // Os elementos originais da matriz são revertidos na sequência ["O", "L", "L", "E", "H"] // O terceiro passo é usar o método junção () para ingressar em cada elemento da matriz e combiná -lo em uma nova string // var junarray = ["", "l" l "l", "e", "h". var junarray = reversearray.join (""); // "olleh" // O quarto passo é retornar uma nova string que é revertida. Retornar JoinArray; // "olleh"} reverrestring ("hello"); // => ollehSimplifique o método acima e pode ser escrito assim:
função reverrestring (str) {return str.split (""). reverse (). junção ("");} reversestring ("hello"); // => ollehInverta a string usando uma travessia de loop decrescente
Este método usa um loop for para executar uma traversal decrementada para a string original e depois redigir a string percorrida em uma nova string:
função reverrestring (str) {// Etapa 1: crie uma string vazia para armazenar a string recém -criada var newstring = ""; // Etapa 2: use o loop para o loop // O loop começa a diminuir a travessia do str.length-1 até que eu seja maior ou igual a 0, o loop continuará // str.Length-1 corresponde ao último caractere da sequência o para (var i = str.length-1; i> = 0; i-) {Newstring += str [i]; // ou NewsTring = NewsTring + str [i]; } // Etapa 3: retorne a string revertida retornar NewsTring; } reverrestring ('hello'); // => // "olleh"Uma simples olhada no processo de travessia de string. Suponha que você precise inverter a string "Hello". Todo o processo de travessia é mostrado na tabela a seguir:
i De fato, o loop for acima também pode ser substituído por while :
função reverrestring (str) {var newstring = ''; var i = str.length; while (i> 0) {newstring += str.substring (i - 1, i); eu--; } return NewsTring;} reverrestring ("Hello"); // => olleh Método substring() em while . substring() retorna uma substring entre dois índices da sequência (ou até o final da string).
Implementar inversão de string usando recursão
Uma sequência também pode ser revertida usando String.prototype.substr() e String.prototype.charAt() .
substr() retorna uma substring na string, começando da posição especificada para o comprimento especificado. por exemplo:
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() retorna o caractere na posição especificada na sequência. Os caracteres na string são indexados da esquerda para a direita, o primeiro caractere tem um valor de índice de 0 e o último caractere (assumindo que o caractere está no stringName ) tem um valor de índice de stringName.length - 1 . Se o valor index especificado estiver fora desse intervalo, uma string vazia será retornada.
var anystring = "Brave New World"; console.log ("O caractere no índice 0 é '" + anystring.charat (0) + "'"); // => O caractere no índice 0 é 'b'console.log ("o caractere no índice 1 é'" + anystring.charat (1) + "'"); // => O caractere no índice 1 é 'r'console.log ("o caractere no índice 2 é'" + anystring.charat (2) + "'"); // => O caractere no índice 2 é 'a'console.log ("O caractere no índice 3 é'" + anystring.charat (3) + "'"); // => O caractere no índice 3 é 'v'console.log ("o caractere no índice 4 é'" + anystring.charat (4) + "'"); // => O caractere no índice 4 é 'e'console.log ("O caractere no índice 999 é'" + anystring.charat (999) + "'"); // => O personagem no índice 999 é ''Combinado, podemos fazer isso para implementar a inversão de string:
função reverrestring (str) {if (str === "") {return ""; } else {return reverSestring (str.substr (1)) + str.charat (0); }} reverrestring ("Hello"); // => ollehA primeira parte do método recursivo. Você precisa se lembrar de que você não vai chamar uma vez, terá várias chamadas aninhadas.
Parte 2 Método recursivo.
O método acima pode ser melhorado e alterado para um operador ternário
função reverrestring (str) {return (str === '')? '': reverrestring (str.substr (1)) + str.charat (0);} reverrestring ("hello"); // => ollehTambém pode ser alterado para este método
função reversestring (str) {return str && reversestring (str.substr (1)) + str [0];} reversestring ("hello"); // => ollehOutros métodos
Além dos métodos acima, existem alguns outros métodos:
Método 1 O código do código de cópia é o seguinte: 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 é o seguinte: function reverseString (str) { for (var i = str.length - 1, newString = ''; i >= 0; newString += str[i--] ) { } return newString;}reverseString("hello"); // => olleh é o seguinte: 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 é o seguinte: 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 Cinco Código de cópia é o seguinte: 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 é o seguinte: function reverseString(str) { return [].reduceRight.call(str, function(prev, curr) { return prev + curr; }, '');}reverseString("hello"); // =>olleh es6
No ES6, pode ser mais simples, como:
[...str].reverse().join('');
ou [...str].reduceRight( (prev, curr) => prev + curr );
ou:
const reverse = str => str && reverse(str.substr(1)) + str[0];
A inversão de cordas é um algoritmo pequeno e simples, como mencionado anteriormente, e é frequentemente usado para entrevistar JavaScript básico. Você pode usar os métodos acima para resolver esse problema ou até usar soluções mais complexas. Se você tiver uma maneira melhor, adicione -o nos comentários abaixo e compartilhe conosco.