JavaScriptの文字列を反転する方法
このような制約のいくつかを次のように指定することができます.たとえば、組み込み関数のような組み込み関数を使用せずに文字列を反転するアルゴリズムを記述します
.reverse()
or .charAt()
. それは常に良いアイデアをジャンプする前に問題を解決しようとする質問を明確にすることです.この場合、文字列を逆にするように求められます.いくつかの質問には以下のようなものがあります.Given a string input, return a string with its characters in the reversed order of the input string.
この課題では、我々は使用することができる機能に制限を提供されていません.また、文字列の入力に特別な文字が含まれているか、どんな条件があれば、私たちの明確な質問をすることもできます.この課題については、入力が正規のASCII文字しか入力されないと答えましょう.
今私たちの明確な質問を聞いたことがある場合は、新しい情報を自分で考えるより多くの時間を購入し、大声であなたの思考プロセスを通信するために使用される問題を再表示することができます.次のようなことが言えるでしょう.
Given a string input of only ASCII characters, I want to create a function that returns a new string with its characters in the reverse order of the input string. I want to return a new string because I want to avoid mutating the original string input
あなたがあなたのはっきりしている質問に対する反応に基づいてそれを理解するので、あなたが問題を述べた今、これは若干の単純な例を書く良い点であるかもしれません.
reverse('hello') === 'olleh'
reverse('world!') === '!dlrow'
reverse('JavaScript') === 'tpircSavaJ'
今、我々は問題、入力と予想される出力を理解して、我々はステップにそれを壊すことができます.function reverse(string) {
let answer = string.split('') // step 1
answer.reverse() // step 2
answer = answer.join('') // step 3
return answer //step 4
}
次に、上記の例で機能をテストすることができます.Given a string
hello
as an input, the function would:
- first split the string on each character, convert it to an array with each character as an element and assign the array to the variable
answer
- reverse the order of the elements in the
answer
array- join the elements in the reversed
answer
array into a string and reassign it to theanswer
variable- return the
answer
variable, which is now a reversed string of the input
関数が動作するようになりましたので、より乾燥させるためにリファクトできます.
function reverse(string) {
return string.split('').reverse().join('')
}
また、spread syntax 配列リテラル表記の内部で.split()
関数.function reverse(string) {
return [...string].reverse().join('')
}
さて、我々は同じ問題を与えられるが、より多くの制約を与えられると仮定しましょうGiven a string input, return a string with its characters in the reversed order of the input string without using built-in functions like
.reverse()
,.charAt()
, the spread syntax; and without using an array.
簡潔さのために、我々の上記のはっきりした質問に同じ答えを仮定しましょう.私たちは最初の問題に同じアプローチを使用することができますが、新しい制約を与えられた異なるステップだけで.
reversed
reversed
文字列reversed
reversed
文字列の末尾にそれらを追加した場合、入力文字列をそのまま再構築し、戻り値を逆の文字列にしたいのです.function reverse(string) {
let reversed = '' // step 1
for(let char of string) { // step 2
reversed = char + reversed; // step 3
}
return reversed; // step 4
}
手順3では、各繰り返しの文字を逆の文字列で連結します(最初に追加することに注意してください)、連結された文字列を逆の変数に再割り当てします.言い換えると、文字から始めて、逆のストリングをそれの最後に加える(連結する);そして、この結合文字列をreversed
変数.我々が置くならば
reversed = reversed + char<
, それは我々が望むものの反対であり、ちょうど入力文字列を再構築するでしょうreverse('hello') === 'hello'
).を使用して文字列を反転するループと連結の
また、ステップ2は
for...of
ES 2015で導入された声明.構文は読みやすくなり、iterableオブジェクトを反復するループを生成します.インタビュアーがES 2015を使わないように頼むならば、あなたは常に伝統を使うことができますfor
ループでも、その制限がないのならfor...of
構文はより簡単です、そして、彼らは導入されていない意図的なエラーの可能性を減らします(セミコロンの代わりにカンマを使用して、初期の表現、条件と増分式を切り離すために).私たちの最後の挑戦のために、我々は同じ問題を与えられると仮定します、しかし、入力ストリングはちょうどASCII文字以上を含むかもしれません.
Given a string input of Unicode characters, return a string with its characters in the reversed order of the input string.
この課題では、入力文字列は7ビット以上のASCII文字で、8ビットのUnicode文字を含んでいます(ASCIIとUnicodeの違いについての大きな説明を参照してください).
Unicode文字を含む文字列を反転するために初期関数を使用すると、奇妙で予期しない結果が得られます.文字列に絵文字を入れましょう.
function reverse(string) {
return string.split('').reverse().join('')
}
reverse('JS is fun! 😄')
// => �� !nuf si SJ
我々は、この使用して、この周りを得ることができますArray.from()
配列のような配列やiterableオブジェクトから新しい配列を作成する方法(文字列の場合).function reverse(string) {
return Array.from(str).reverse().join("")
}
reverse('JS is fun! 😄')
// => 😄 !nuf si SJ
結論
JavaScriptの逆の文字列アルゴリズムにアプローチする方法を学びました.
私は、これが役に立つことを望みます!何か質問やコメントがあれば教えてください.あなたは私の上に従うことができます.GitHub , と私のwebsite .
この記事はもともと公開されたanthonygharvey.com 2018年7月28日
Reference
この問題について(JavaScriptの文字列を反転する方法), 我々は、より多くの情報をここで見つけました https://dev.to/anthonyharvey/how-to-reverse-a-string-in-javascript-2j40テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol