ホームページ > ウェブフロントエンド > jsチュートリアル > 文字列 reversal_JavaScript_JavaScript のヒント

文字列 reversal_JavaScript_JavaScript のヒント

WBOY
リリース: 2016-05-16 15:03:21
オリジナル
1374 人が閲覧しました

今日、freeCodeCamp で質問に答えていたところ、文字列の反転に関する質問に遭遇しました。文字列の反転は、JavaScript における一般的な面接の質問の 1 つです。おそらく面接官は「Hello Word!」という文字列を与え、JavaScript を使用してそれを「!droW olleH」に変換するように求めるでしょう。

私も初心者ですが、以前に学んだ配列関連の知識と問題のヒントを使用して、この問題を解く別の方法があるのではないかと考えました。検索した結果、まだ多くの方法があります。今後の使用のためにこれらの方法を示します。

やるべきこと

私たちがしなければならないこと:

提供された文字列を逆向きの文字列の前に逆向きに表示するには、文字列を配列に変換する必要があります。最終結果は依然として文字列です

次に、上記の要件を達成するためのいくつかの方法を見てみましょう。

組み込み関数を使用する

演習問題では、文字列を正常に反転表示するには 3 つの方法を使用できることに注意してください。

String.prototype.split()Array.prototype.reverse()Array.prototype.join()

簡単に見てみましょう:

split() メソッドは、文字列オブジェクトの各文字を分割し、各文字列を配列の各要素として扱います。 reverse() メソッドは、配列を変更し、配列内の要素を逆順に配置するために使用されます。配列要素が最後の要素になり、最後の要素が最初の要素になります。 join() メソッドは、配列内のすべての要素を文字列

に接続します。

例を見てみましょう:

function reverseString(str)
 { // 第一步,使用split()方法,返回一个新数组 
// var splitString = "hello".split(""); 
var splitString = str.split(""); 
//将字符串拆分 // 返回一个新数组["h", "e", "l", "l", "o"] 
// 第二步,使用reverse()方法创建一个新数组 
// var reverseArray = ["h", "e", "l", "l", "o"].reverse(); 
var reverseArray = splitString.reverse(); 
// 原数组元素顺序反转["o", "l", "l", "e", "h"] 
// 第三步,使用join()方法将数组的每个元素连接在一起,组合成一个新字符串 
// var joinArray = ["o", "l", "l", "e", "h"].join(""); 
var joinArray = reverseArray.join(""); // "olleh" 
// 第四步,返回一个反转的新字符串 return joinArray; 
// "olleh"}reverseString("hello"); 
// => olleh
ログイン後にコピー

上記のメソッドを簡略化し、次のように記述します。

function reverseString(str) {
 return str.split("").reverse().join("");
}reverseString("hello"); 
// => olleh
ログイン後にコピー

降順ループトラバーサルを使用して文字列を反転します

このメソッドは、for ループを使用して元の文字列の下降走査を実行し、走査された文字列を新しい文字列に再結合します。

function reverseString(str) { 
// 第一步:创建一个空的字符串用来存储新创建的字符串 var newString = ""; 
// 第二步:使用for循环 
// 循环从str.length-1开始做递减遍历,直到 i 大于或等于0,循环将继续
 // str.length - 1对应的就是字符串最后一个字符o for (var i = str.length - 1; i >= 0; i--) {
 newString += str[i]; // 或者 newString = newString + str[i]; } 
// 第三步:返回反转的字符串 return newString; }reverseString('hello'); 
// => // "olleh"
ログイン後にコピー

文字列トラバーサルのプロセスを簡単に見てみましょう。文字列「hello」を反転する必要があるとします。走査プロセス全体を次の表に示します:

反復順序 に対応する値 i 新しい文字列 newString 各反復 str.length - 1 newString + str[i] 最初の反復 5 - 1 = 4 "" + "o" = "o" 2 番目の反復 4 - 1 = 3 "o" + "l" = "ol " 3 回目の反復 3 - 1 = 2 "ol" + "l" = "oll" 4 回目の反復 2 - 1 = 1 "oll" + "e" = "olle" 5 回目の反復 1 - 1 = 0 "olle" + " h" = "オーレー"

実際、上記の

ループは for ループに置き換えることもできます。 while

function reverseString (str) {
 var newString = '';
 var i = str.length; while (i > 0) {
 newString += str.substring(i - 1, i);
 i--; 
} 
return newString;}reverseString("hello"); 
// => olleh
ログイン後にコピー
ループ内の

while メソッド。 substring() 文字列の 2 つのインデックスの間 (または文字列の末尾まで) の部分文字列を返します。 substring()

再帰を使用して文字列を反転します

メソッドと String.prototype.substr() メソッドを使用して文字列を反転することもできます。 String.prototype.charAt()

メソッドは、文字列内の指定された位置から指定された長さまでの部分文字列を返します。例: substr()

var str = "abcdefghij";
console.log("(1,2): " + str.substr(1,2));
 // (1,2): bcconsole.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("The character at index 0 is '" + anyString.charAt(0) + "'"); 
// =>The character at index 0 is 'B'console.log("The character at index 1 is '" + anyString.charAt(1) + "'"); 
// =>The character at index 1 is 'r'console.log("The character at index 2 is '" + anyString.charAt(2) + "'"); 
// =>The character at index 2 is 'a'console.log("The character at index 3 is '" + anyString.charAt(3) + "'"); 
// => The character at index 3 is 'v'console.log("The character at index 4 is '" + anyString.charAt(4) + "'"); 
// => The character at index 4 is 'e'console.log("The character at index 999 is '" + anyString.charAt(999) + "'"); 
// => The character at index 999 is ''
ログイン後にコピー
組み合わせると、次のように文字列を反転できます。

function reverseString(str) { if (str === "") { 
return ""; } else { 
return reverseString(str.substr(1)) + str.charAt(0); }
}reverseString("hello"); 
// => olleh
ログイン後にコピー
再帰的メソッドの最初の部分。一度呼び出すだけではなく、複数のネストされた呼び出しがあることを覚えておく必要があります。

str === "?" への各呼び出し reverseString(str.subst(1)) + str.charAt(0) 初めて reverseString("Hello") を呼び出したとき reverseString("ello") + "h" 2 回目に reverseString("ello") を呼び出したとき reverseString("llo") + "e" 3 回目の呼び出し reverseString("llo") reverseString("lo") + "l" 4 回目の呼び出し reverseString("lo") reverseString("o") + "l" 5 回目の呼び出し reverseString("o") reverseString(" ") + "お"

2 番目の部分の再帰的メソッド。

すべての電話 5 番目の呼び出し reverseString("") + "o" = "o" を返します。 4 番目の呼び出し reverseString("o") + "l" = "o" + "l" 3 番目の呼び出し reverseString("lo") + "l " = "o" + "l" + "l" reverserString("llo") + "e" = "o" + "l" + "l" + "e" への 2 回目の呼び出し reverserString("ello") ") + "h" = "o" + "l" + "l" + "e" + "h"

上記のメソッドはさらに改良して三項演算子に変更できます

function reverseString(str) { 
return (str === '') ? '' : reverseString(str.substr(1)) + str.charAt(0);}
reverseString("hello"); 
// => olleh
ログイン後にコピー

この方法に変更することもできます

function 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
方法 2
コードをコピーしますコードは次のとおりです:
function reverseString (str) { for (var i = str.length - 1, newString = ''; i >= 0; newString += str[i--] ) { } return newString;}reverseString("hello"); // => olleh
方法 3
コードをコピー コードは次のとおりです。
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
方法 4
コードをコピーします コードは次のとおりです:
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
方法 6
コードをコピーしますコードは次のとおりです:
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 の基本に関するインタビューでよく使用されます。この問題を解決するには、上記のさまざまな方法を使用することも、より複雑な解決策を使用することもできます。もっと良い方法がある場合は、以下のコメントに追加して私たちと共有してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート