今日、私はFreeCodecampで質問を練習していましたが、弦の反転についての質問に遭遇しました。文字列の逆転は、JavaScriptの一般的なインタビューの質問の1つです。インタビュアーは、JavaScriptを介して「HelloWord!」を「HelloWord!」に変えることができます。
私も初心者です。以前に学んだ配列に関連する知識と、質問のヒントを使用して、テストに合格しました。後で、この問題を解決する他の方法はありますか?検索後、まだ多くの方法があります。後で使用するためのこれらの方法のいくつかを以下に示します。
やること
私たちがやりたいこと:
逆の文字列の前に逆に提供された文字列を表示する前に、文字列を配列に変換する必要がありますが、最終結果はまだ文字列です。
次に、上記の要件を達成できる方法を見てみましょう。
組み込み関数を使用します
演習では、3つの方法を使用して、逆に文字列を正常に表示できるように促されます。
string.prototype.split()array.prototype.reverse()array.prototype.join()
簡単に説明してください:
split()メソッドは、文字列オブジェクトの各文字を分割し、各文字列を配列の各要素として扱い、配列を変更するために()メソッドを逆にし、アレイ内の要素を逆順に配置し、最初の配列要素が最後になり、最後のアレイ要素が最初のJoin()メソッドになります。
例を見てみましょう:
関数Reversestring(str){//最初のステップは、split()メソッドを使用して新しい配列を返すことです。 var splitstring = str.split( ""); //文字列の分割//新しい配列["h"、 "e"、 "l"、 "l"、 "l"、 "o"] // 2番目のステップは、reverse()メソッドを使用して新しい配列を作成することです// var reversearray = ["h"、 "e"、 "l"、 "l"、 "o"]。 var reversearray = splittring.reverse(); //元の配列要素は、[o "、" o "、" l "、" l "、" e "、" h "]で順番に逆になっています。// 3番目のステップは、join()メソッドを使用して配列の各要素を結合し、var joinarray = [" o "、" l "、" l "、" e "、" h "]。 var JoinArray = Reversearray.join( ""); // "Olleh" // 4番目のステップは、逆になった新しい文字列を返すことです。 JoinArrayを返します。 // "olleh"} Reversestring( "hello"); // => olleh上記の方法を簡素化し、次のように書くことができます。
関数Reversestring(str){return str.split( "")。reverse()。join( "");} Reversestring( "hello"); // => olleh減少ループトラバーサルを使用して文字列を反転します
この方法では、 forループを使用して、元の文字列への減少したトラバーサルを実行し、トラバースされた文字列を新しい文字列に再マザーします。
関数Reversestring(str){//ステップ1:空の文字列を作成して、新しく作成された文字列var Newstring = ""; //ステップ2:for loopを使用します//またはNewString = NewString + Str [i]; } //ステップ3:逆の文字列return Newstringを返します。 } Reversestring( 'Hello'); // => //「オレ」弦トラバーサルのプロセスを簡単に見る。文字列「hello」を反転する必要があるとします。トラバーサルプロセス全体を次の表に示します。
i実際、上記のforループはwhileループに置き換えることもできます。
関数Reversestring(str){var Newstring = ''; var i = str.length; while(i> 0){newstring += str.substring(i -1、i);私 - ; } return NewString;} Reversestring( "hello"); // => olleh whileループでsubstring()メソッド。 substring()文字列の2つのインデックス(または文字列の端まで)の間にサブストリングを返します。
再帰を使用して文字列反転を実装します
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の文字は ''
組み合わせて、これを行うために文字列の反転を実装できます。
関数Reversestring(str){if(str === ""){return ""; } else {return reversestring(str.substr(1)) + str.Charat(0); }} Reversestring( "Hello"); // => olleh再帰法の最初の部分。一度電話するだけでなく、いくつかのネストされた呼び出しがあることを覚えておく必要があります。
パート2再帰方法。
上記の方法をさらに改善し、三元演算子に変更できます
function reversestring(str){return(str === '')? '':Reversestring(str.substr(1)) + str.Charat(0);} ReverSestring( "Hello"); // => ollehまた、この方法に変更することもできます
関数Reversestring(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にインタビューするためによく使用されます。上記の方法を使用してこの問題を解決したり、より複雑なソリューションを使用したりすることもできます。より良い方法がある場合は、以下のコメントに追加して、私たちと共有してください。