오늘 저는 Freecodecamp에 대한 질문을 연습하고 있었고 문자열 반전에 대한 질문을했습니다. 문자열을 뒤집는 것은 JavaScript의 일반적인 인터뷰 질문 중 하나입니다. 면접관은 "Hello Word!"끈을 줄 것입니다. 이로 인해 JavaScript를 통해 "! drow olleh"로 바꿀 수 있습니다.
나는 또한 초보자입니다. 이전에 배운 배열과 관련된 지식과 질문에 대한 팁을 사용하여 테스트를 통과했습니다. 나중에이 문제를 해결할 수있는 다른 방법이 있습니까? 검색 후에도 여전히 많은 방법이 있습니다. 다음은 나중에 사용하기위한 이러한 방법 중 일부입니다.
할 일
우리가하고 싶은 일 :
리버스 스트링 전에 제공된 문자열을 리버스로 표시하기 전에 문자열을 배열로 변환해야하며 최종 결과는 여전히 문자열입니다.
다음으로 위의 요구 사항을 달성 할 수있는 방법을 살펴 보겠습니다.
내장 기능을 사용합니다
연습에서, 우리는 세 가지 방법을 사용하여 리버스에 문자열을 성공적으로 표시 할 수 있음을 알게됩니다.
String.prototype.split () array.prototype.reverse () array.prototype.join ()
간단히 살펴보십시오.
split () 메소드는 문자열 객체의 각 문자를 나누고 각 문자열을 배열의 각 요소로 처리하고, 배열 () 메소드 배열을 변경하고 배열의 요소를 역 순서로 배열하고 첫 번째 배열 요소가 마지막 결합 () 메소드가 문자열에 모든 요소를 연결합니다.
예를 살펴 보겠습니다.
함수리스트리스트 (str) {// 첫 번째 단계는 split () 메소드를 사용하여 새 배열을 반환하는 것입니다. // var splitstring = "hello".split ( ""); var splitstring = str.split ( ""); // 문자열을 분할 // 새 배열을 반환합니다 [ "h", "e", "l", "l", "l", "o"] // 두 번째 단계는 Reverse () 메소드를 사용하여 새 배열을 사용하여 // var reversearray = [ "h", "e", "l", "l", "o"]. var reversearray = splitstring.reverse (); // 원래 배열 요소는 순서대로 반전됩니다 [ "o", "l", "l", "e", "h"] // 세 번째 단계는 join () 메소드를 사용하여 배열의 각 요소를 결합하고 새로운 문자열로 결합하여 // var joinArray = [ "o", "l", "e", "h"(join); var joinArray = ReverseArray.join ( ""); // "olleh"// 네 번째 단계는 반대로 된 새 문자열을 반환하는 것입니다. Return JoinArray; // "olleh"} Reversestring ( "Hello"); // => Olleh위의 방법을 단순화하고 다음과 같이 쓸 수 있습니다.
함수리스트리스트 (str) {return str.split ( ""). reverse (). join ( "");} 리버 스트링 ( "hello"); // => Olleh감소하는 루프 트래버스를 사용하여 문자열을 반전시킵니다
이 메소드는 for 루프를 사용하여 원래 문자열로 감소 된 트래버스를 수행 한 다음 트래버스 된 문자열을 새 문자열로 다시 관리합니다.
함수 리버 스트링 (str) {// 1 단계 : 새로 생성 된 문자열 var restring = ""를 저장하기 위해 빈 문자열을 만듭니다. // 2 단계 : for loop // 루프 사용 // 루프는 str.length-1에서 i가 0보다 크거나 동일 할 때까지 트래버스를 감소시키기 시작합니다. 루프는 str.length-1이 계속됩니다. // 또는 Newstring = Newstring + str [i]; } // 3 단계 : 역전 된 문자열 리턴 뉴스 스트링을 반환합니다. } 반전 ( 'hello'); // => // "olleh"스트링 트래버스의 과정을 간단하게 살펴 봅니다. 문자열을 "Hello"를 반전시켜야한다고 가정하십시오. 전체 트래버스 프로세스는 다음 표에 나와 있습니다.
i 의 값 실제로 위의 for Loop은 또한 while 루프로 대체 될 수 있습니다.
함수 반전 (str) {var newstring = ''; var i = str.length; while (i> 0) {Newstring += str.substring (i -1, i); 나--; } return NewsTring;} Reversestring ( "Hello"); // => Olleh substring() while 루프의 메소드. substring() 문자열의 두 인덱스 (또는 문자열 끝) 사이의 하위 문자열을 반환합니다.
재귀를 사용하여 문자열 반전을 구현하십시오
문자열은 String.prototype.substr() 및 String.prototype.charAt() 메소드를 사용하여 역전 할 수 있습니다.
substr() 메소드는 지정된 위치에서 지정된 길이로 시작하는 문자열의 서브 스트링을 반환합니다. 예를 들어:
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() 메소드는 문자열의 지정된 위치에서 문자를 반환합니다. 문자열의 문자는 왼쪽에서 오른쪽으로 인덱싱되고, 첫 번째 문자는 인덱스 값이 0 이고 마지막 문자 (문자가 stringName 에 있다고 가정 함) stringName.length - 1 인 색인 값을 갖는다. 지정된 index 값 이이 범위를 벗어난 경우 빈 문자열이 반환됩니다.
var anystring = "Brave New World"; console.log ( "색인 0의 문자는 ' + anystring.charat (0) +"' "); // => 인덱스 0의 문자는 'b'console.log입니다 ( "색인 1의 문자는' + anystring.charat (1) +" ' "); // => 인덱스 1의 문자는 'r'console.log입니다 ( "색인 2의 문자는' + anystring.charat (2) +" ' "); // => 인덱스 2의 문자는 'a'console.log입니다 ( "색인 3의 문자는' + anystring.charat (3) +" ' "); // => 인덱스 3의 문자는 'v'console.log입니다 ( "색인 4의 문자는' + anystring.charat (4) +" ' "); // => 인덱스 4의 문자는 'e'console.log입니다 ( "색인 999의 문자는' + anystring.charat (999) +" ' "); // => 인덱스 999의 문자는 ''입니다.
결합하여 문자열 반전을 구현하기 위해이 작업을 수행 할 수 있습니다.
함수 반전 (str) {if (str === "") {return ""; } else {return Reversestring (str.substr (1)) + str.charat (0); }} 반전 ( "hello"); // => Olleh재귀 방법의 첫 번째 부분. 한 번만 부르지 않고 여러 개의 중첩 된 전화가있을 것임을 기억해야합니다.
파트 2 재귀 방법.
위의 방법은 더욱 개선되고 3 원 운영자로 변경 될 수 있습니다.
함수 반전 (str) {return (str === '')? '': Reversestring (str.substr (1)) + str.charat (0);} Reversestring ( "Hello"); // => Olleh이 방법으로 변경할 수도 있습니다
함수 반전 (str) {return str && Reversestring (str.substr (1)) + str [0];} Reversestring ( "Hello"); // => Olleh다른 방법
위의 방법 외에도 실제로 다른 방법이 있습니다.
방법 1 복사 코드 코드는 다음과 같습니다. 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 다음과 같습니다. function reverseString (str) { for (var i = str.length - 1, newString = ''; i >= 0; newString += str[i--] ) { } return newString;}reverseString("hello"); // => olleh 다음과 같습니다. 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 다음과 같습니다. 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 메소드 5 복사 코드 코드는 다음과 같습니다. 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 다음과 같습니다. function reverseString(str) { return [].reduceRight.call(str, function(prev, curr) { return prev + curr; }, '');}reverseString("hello"); // =>olleh es6 메소드
ES6에서는 다음과 같이 더 간단하게 만들 수 있습니다.
[...str].reverse().join('');
또는 [...str].reduceRight( (prev, curr) => prev + curr );
또는:
const reverse = str => str && reverse(str.substr(1)) + str[0];
문자열 반전은 앞에서 언급했듯이 작고 간단한 알고리즘이며 종종 기본 JavaScript를 인터뷰하는 데 사용됩니다. 위의 방법을 사용 하여이 문제를 해결하거나 더 복잡한 솔루션을 사용할 수도 있습니다. 더 나은 방법이 있다면 아래 의견에 추가하여 공유하십시오.