2017-10-08 8 views
0

reverseStrという関数を作成しました。この関数はパラメータとして文字列を受け取り、その文字列を逆に返します。私はそれがbbbbbbbb返す関数reverseStr("bootcamp")を実行するとJS:ネストされたループを使用して文字列を反転させると機能しません

function reverseStr(str) 
 
{ 
 
\t var splitStr = str.split(""); 
 
\t console.log(splitStr); 
 
\t var reverseString = []; 
 
\t for(var i = 0; i <= splitStr.length -1 ; i++) 
 
\t { 
 
\t \t for(var j = splitStr.length - 1; j >= 0; j--) 
 
\t \t { 
 
\t \t \t reverseString[i] = splitStr[j] 
 
\t \t } 
 
\t } 
 

 
\t return reverseString.toString().replace(/[&\/\\#,+()$~%.'":*?<>{}]/g, ''); 
 
}

:たとえば

reverseStr('bootcamp'); =>'pmactoob'

以下は、私のプログラムです。 コードに問題があるのは誰ですか?

注:私は、次のコードREVERSE()組み込み関数

しかし、私が見つけた成功を使用したいが、まだ私の最初の質問

function reverseStr(str) 
 
{ 
 
\t var splitStr = str.split(""); 
 
\t reverseStr = ""; 
 
\t for(var i = splitStr.length - 1; i >= 0 ; i = i - 1) 
 
\t { 
 
\t \t reverseStr += splitStr[i]; 
 
\t } 
 

 
\t return reverseStr; 
 
}

に答えを必要とするDONOT
+0

あなたの最初の質問にはまだ答えが必要ですか? – Aydin4ik

+0

yes please @Aydin – socrates

答えて

1

文字を二重反復する必要はありません。すなわち、forループをネストする必要はありません。

function reverseStr(str) 
{ 
    var splitStr = str.split(""); 
    console.log(splitStr); 
    var reverseString = []; 
    for(var i = 0, j=splitStr.length-1; i <= splitStr.length -1 ; i++, j--) 
    { 
      reverseString[i] = splitStr[j] 
    } 

    return reverseString.toString().replace(/[&\/\\#,+()$~%.'":*?<>{}]/g, ''); 
} 

あなたがここでループは限りi <= splitStr.length -1、つまり、文字列の長さなどのために行くことがわかります。このように、一回反復し、逆の順序で文字をつかみます。これは、ミラーリング文字(iArray.length-i)を取得するのに十分です。おそらく、

var reverseStr = function(str) { 
 
    let result = String(); 
 
    for(let i = str.length-1; i >= 0; i--) { 
 
    result += str.charAt(i); 
 
    } 
 
    return result.replace(/[&\/\\#,+()$~%.'":*?<>{}]/g, ''); 
 
} 
 
$('button').click(function() { 
 
    $('.result').text(reverseStr($('#str').val())); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
    <input type="text" id="str"> 
 
    <button>Reverse it</button> 
 
    <div class="result"></div>

からArray.prototype.reverse()を離れて)同じことを達成するために、よりエレガントな方法には次のようになります。ここでは

はデモに努めスニペットです String.prototype.chatAt()を使用してください。これは配列との2回の変換を回避し、1つの変数を節約します。確かに、コードはそれが行っていることではるかに短く、より明白です。オリジナルポスターに

var reverseStr = function(str) { 
 
    let result = String(); // An empty string to store the result 
 
    for(let i = str.length-1; i >= 0; i--) { // Iterate backwards thru the chars and add to the result string 
 
    result += str.charAt(i); 
 
    } 
 
    return result.replace(/[&\/\\#,+()$~%.'":*?<>{}]/g, ''); // Original return method of the author 
 
} 
 
$('button').click(function() { 
 
    $('.result').text(reverseStr($('#str').val())); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
    <input type="text" id="str"> 
 
    <button>Reverse it</button> 
 
    <div class="result"></div>

+0

'i <= splitStr.length -1;の後にエラーが発生しました – socrates

+0

コードを実行するための別の方法が追加されました。これは、よりクリーンな方法でタスクを達成する方法かもしれません。それはあなたの質問に対する直接的な答えではありません - 指摘すると、誰かが役に立つと思うかもしれません。 – Aydin4ik

0

問題は、入れ子になったforループがコース全体を実行してから外側に戻ることです。forループ。したがって、長さに等しい時間だけ1文字を繰り返します。別のforループを使用する代わりに、のような単純カウンタを外側のforループ内にj++のように追加し、その値をi値で使用してください。

0

、この考えてみましょう。あなたは、元の文字列の長さを知っている場合、あなたはそのため、元の文字列内のその最後の位置のオフセットを知っている

を。

元の文字列を逆順に反復し、現在の位置の値を新しい文字列に追加します。新しい文字列はオリジナルの逆です。

0

アイディンの例は本質的に正しいです。ここに私の非常によく似たバージョンがあります:

function reverseString(inputString) { 
    // create a new empty string 
    var newString = ""; 

    // iterate through the characters of the string in reverse order, 
    // appending to the new string 
    for (var i = inputString.length - 1; i >= 0; i--) { 
     newString += inputString[i]; 
    } 

    return newString; 
} 

console.log(reverseString('bootcamp')); 
関連する問題