3

最後のカンマを削除してピリオドに置き換えたい場所に作成した文字列があります。他のすべてのコンマを保持したいと思います。ここでは、条件付きステートメントを使用しようとしました。コンマを追加することはできますが、最後のステートメントをピリオドに置き換えることはできません。私はこれが初めてです、私は本当に助けをいただければ幸いです。

for (var i = 0; i < petArray.length; i++) {
    petObj = petArray[i];
    likesString = petObj.name + " " + " is a " + petObj.type + " she " + " likes ";
    for (var j = 0; j < petObj.likes.length; j++) {
        if (j < petObj.likes.length) {
            var likesString = likesString + petObj.likes[j] + ", ";
        }
        else if (j == petObj.likes.length) {
            likesString.replace(", ", ".");
        }
    }
    displayResult();
}
4

7 に答える 7

3

あなたはそれを難し​​い方法でやっているようです!Arryのjoin()メソッドを使用してリストを作成します。

for (var i = 0; i < petArray.length; i++) {
    petObj = petArray[i];
    likesString = petObj.name + " is a " + petObj.type + " she likes " +
                  petObj.likes.join(", ") + ".";
    displayResult();
}
于 2012-12-28T21:19:32.413 に答える
2

これはそれを行います:

 str.replace(/,([^,]*)$/,".$1")

正規表現は、コンマの後に文字列の最後まで任意の数の非コンマが続く場合に一致します...定義上、これは最後のコンマです。カンマがない場合、1つのコンマ、または任意の数のコンマがある場合に機能します。

于 2012-12-28T21:17:36.557 に答える
1

文字列内の最後のコンマをピリオドに置き換えるには、次を使用できます。

var index = str.lastIndexOf(",");
var newstr = str.substring(0, index) + "." + str.substring(index + 1);

コードを確認したところ、epascarelloのアプローチが最適のようです。彼が指摘したことに加えて、配列に要素がない場合、文字列は突然「彼女が好き」で終わります。これを修正するには、次を使用できます。

likesString = petObj.name + " is a " + petObj.type + (petObj.likes.length ? ", she likes " + petObj.likes.join(", ") : "") + ".";
于 2012-12-28T21:15:40.707 に答える
1

これの「if」部分は常にtrueである必要があるため、「else」部分は実行されないことに注意してください。

for (var j = 0; j < petObj.likes.length; j++) {
    if (j < petObj.likes.length) {
        var likesString = likesString + petObj.likes[j] + ", ";
    }
    else if (j == petObj.likes.length) {
        likesString.replace(", ", ".");
    }
}

forループは、その条件が真であり、コードが同じ条件をテストする場合にのみ続行するように指示します。

あなたはこのようなことをするかもしれません:

for (var j = 0; j < petObj.likes.length; j++) {
    if (j < petObj.likes.length-1) {
        likesString = likesString + petObj.likes[j] + ", ";
    }
    else {
        likesString = likesString + petObj.likes[j] + ". ";
    }
}

あまり重複しない条件を実行するためのより良い方法がありますが、それはあなたが望むことをするかもしれません。(また、余分な「var」部分を修正しました。)

于 2012-12-28T21:24:17.670 に答える
1

正規表現を学習してテストするのに最適な場所は次のとおりです。RegExr

基本的に、次のものを置き換える必要があります。

RegExp Pattern: /,([^,]+)$/
Replace Pattern: .$1

したがって、コードは次のようになります。

s.replace(/,([^,]+)$/, '.$1');

sの最後のカンマを置き換えようとしている文字列はどこにありますか。

その行を変数に設定して保存することを忘れないでください。

于 2012-12-28T21:26:48.863 に答える
0

まず、次のようなコードで最後のコンマを入力しないようにすることができます。

for (var i = 0; i < petArray.length; i++) {
    petObj = petArray[i];
    var likesString = petObj.name + " " + " is a " + petObj.type;
    if (petObj.likes.length) {
       likesString = likesString + " she " + " likes " petObj.likes.join(", ");
    }
    likesString = likesString + '.'
    displayResult();
}

それでもコードを使用したい場合は、likes配列インデックスが0からlength-1になるため、lenght-1に対してテストする必要があります。

for (var i = 0; i < petArray.length; i++) {
    petObj = petArray[i];
    var likesString = petObj.name + " " + " is a " + petObj.type + " she " + " likes ";
    for (var j = 0; j < petObj.likes.length; j++) {
      likesString = likesString + petObj.likes[j] + ((j == petObj.likes.length-1)?'.':', ';
    }
    displayResult();
}

構築後も文字列を変更したい場合は、最後の2文字を削除するだけです。

likesString=likesString.replace(/, $/,'.')
于 2012-12-28T21:29:15.133 に答える
-1

これは、replace()が文字列自体を変更する代わりに、新しい値で新しい文字列を返すため、代わりにこれを行うことができます。

likesString = likesString.replace(/,\s$/, ".");
于 2012-12-28T21:15:50.700 に答える