0

尝试一个有趣的问题,即用行中的下一个元音替换字符串中的元音,即 a->e、e->i、i->o、o->u,而不考虑“u”。从数组而不是字符串开始。我的第二个循环(迭代元音数组元素)忽略了我的“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 在从 0 开始之前循环到 5。我得到了正确的输出,但 j 应该在 4 处停止...

编辑

有人可以解释一下我是如何错误地使用 join 的,因为我无法让我的函数输出一个字符串而不仅仅是一个数组。

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-indexed...

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 回答