0

文字列内の母音を、a->e、e->i、i->o、o->u という行の次の母音に置き換える楽しい問題を試してみてください。"u" は考慮されません。文字列ではなく配列から始めます。私の 2 番目のループ (母音配列要素を反復処理するため) は、私の "j

var vowelChange = function(vowelArray, stringToChange) {
for (var i = 0; i<stringToChange.length; i++) {
    for (var j = 0; j<vowelArray.length; j++) {
      if (stringToChange[i]===vowelArray[j]) {
        var newCharacter = vowelArray[j+1]
          stringToChange[i] = newCharacter
          i++
      }
    }
}
return stringToChange
};

node-debug を使用してブラウザーでブレークポイントを設定していますが、j は 5 にループしてから 0 からやり直しています。正しい出力が得られますが、j は 4 で停止するはずです...

編集

単なる配列ではなく文字列を出力する関数を取得できないため、結合を誤って使用している方法を誰かが説明できますか?

var vowelChange = function(vowelArray, stringToChange) {
for (var i = 0; i<stringToChange.length; i++) {
    for (var j = 0; j<vowelArray.length-1; j++) {
      if (stringToChange[i]===vowelArray[j]) {
          stringToChange[i] = vowelArray[j+1]
          break
      }
    }
  }
  stringToChange = stringToChange.join('')
  return stringToChange
};


var vowels = ['a','e','i','o','u']
var firstName = ['t', 'e', 's', 't']

vowelChange(vowels, firstName)
console.log(firstName)
4

2 に答える 2

1

vowelArray のインデックスが 0 であると仮定すると...

var vowelChange = function(vowelArray, stringToChange) {
    for (var i = 0; i<stringToChange.length; i++) {
        for (var j = 0; j<vowelArray.length - 1; j++) {
            if (stringToChange[i]===vowelArray[j]) {
                stringToChange[i] = vowelArray[j+1];
                break;
            }
        }
    }
    return stringToChange
};
于 2016-04-26T17:32:35.330 に答える
0

JavaScript では、文字列は不変オブジェクトです。つまり、文字列内の文字は変更できず、文字列に対する操作は実際に新しい文字列を作成します。

したがって、文字列のインデックスを変更しようとしても、元の文字列は変更されません

node
> str = "hello this is dummy string";
'hello this is dummy string'
> str[0] = "w";
'w'
> str
'hello this is dummy string'

だから、stringToChange[i] = vowelArray[j+1];うまくいきません

文字列を分割してから結合できます

var vowelChange = function(vowelArray, stringToChange) {
    stringToChange = stringToChange.split('');
    for(var i=0; i<stringToChange.length;i++){
        for(var j=0;j<vowelArray.length-1;j++){
            if(stringToChange[i] == vowelArray[j]){
                stringToChange[i] = vowelArray[j+1];
                break;
            }
        }
    }
    stringToChange = stringToChange.join('');
    return stringToChange;
};

于 2016-04-26T18:42:44.593 に答える