-2

これが問題です。バックエンドから文字列を取得しており、2 文字を大文字に置き換えたいと考えています。以下はコードです:

var query = "WHERE account >= 23 || company != null;";
var slicedQuery = query.slice(7);

slicedQuery = slicedQuery.replace(slicedQuery.charAt(slicedQuery.lastIndexOf(";")), "");

var firstChar = slicedQuery.charAt(0);
slicedQuery = slicedQuery.replace(firstChar, firstChar.toUpperCase());

if(slicedQuery.indexOf("|") >= 0) {

    var charInCondition = slicedQuery.charAt(slicedQuery.indexOf("|") + 3);

    slicedQuery = slicedQuery.replace(charInCondition, charInCondition.toUpperCase());
}

アカウントの「a」は「A」に正しく置き換えられます。しかし、会社の「c」は置き換えられていません。代わりに、Acconut の「c」は「C」に置き換えられています。これを行う方法を教えてください。ヘルプ!

4

1 に答える 1

0

問題

関数は、最初の引数の最初の出現のみreplaceを置き換えます。あなたのコードは、'c' ("company" から) を置き換える必要があることを正しく認識していますが、呼び出すと、'c' ("account" 内) の最初の出現のみが変更されます。replace


ソリューション

ifブロック内のコードを次のように置き換える必要があります。

var idx = slicedQuery.indexOf("|") + 3;
var charToReplace = slicedQuery.charAt(idx);
slicedQuery = slicedQuery.substring(0, idx)
              + slicedQuery.substring(idx).replace(
        charToReplace, charToReplace.toUpperCase());

(ところで、そうすべきだと確信して.slice(7).slice(6)ますか?)

于 2013-06-17T05:45:53.080 に答える