Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么';t.toUpperCase()将str[i]大写?_Javascript_Indexing_Capitalization - Fatal编程技术网

Javascript 为什么';t.toUpperCase()将str[i]大写?

Javascript 为什么';t.toUpperCase()将str[i]大写?,javascript,indexing,capitalization,Javascript,Indexing,Capitalization,进行CoderByte挑战: 使用JavaScript语言,具有函数LetterChanges(str) 获取正在传递的str参数,并使用以下命令对其进行修改 算法。用字母替换字符串中的每个字母 在字母表中紧跟其后(即c变成d,z变成a)。然后 将新字符串中的每个元音大写(a、e、i、o、u),最后 返回这个修改过的字符串 我的解决方案: function LetterChanges(str) { var alphabet = "abcdefghijklmnopqrstuvwxyza",

进行CoderByte挑战:

使用JavaScript语言,具有函数LetterChanges(str) 获取正在传递的str参数,并使用以下命令对其进行修改 算法。用字母替换字符串中的每个字母 在字母表中紧跟其后(即c变成d,z变成a)。然后 将新字符串中的每个元音大写(a、e、i、o、u),最后 返回这个修改过的字符串

我的解决方案:

function LetterChanges(str) {
    var alphabet = "abcdefghijklmnopqrstuvwxyza",
        vowels = "aiueo",
        newstr = '';

    for (var i = 0; i < str.length; i++) {
        if (alphabet.indexOf(str[i]) != -1) {
            newstr += alphabet[alphabet.indexOf(str[i]) + 1];
        } else {
            newstr += str[i];
        }  
    }


    for (var i = 0; i < vowels.length; i++) {
        for (var j = 0; j < newstr.length; j++) {
            //toUppercase the vowel in the newstring once found
            if (newstr[j] == vowels[i]) {
                newstr[j] = newstr[j].toUpperCase(); 
            }
        }
   }
   return newstr;
} 

show(LetterChanges("fun times"));
show(LetterChanges("hello*3"));

如果您想到更好的解决方案,请回答
toUpperCase()
部分,然后推荐另一种解决方案。

字符串的内容不能更改,即它们是不可变的。创建新字符串,而不是尝试就地编辑。

字符串的内容不能更改,即它们是不可变的。创建一个新字符串,而不是尝试就地编辑一个字符串。

Javascript中的字符串是基本类型,而不是对象

当您在原语类型中设置属性时(例如,
str[i]='a'
),Javascript会为该值创建一个新的装箱对象,对其进行变异,然后将其丢弃

有关更多详细信息,请参阅


相反,您应该在可变数组中组装新字符串,然后调用
.join(“”)
将其转换为字符串。

Javascript中的字符串是基本类型,而不是对象

当您在原语类型中设置属性时(例如,
str[i]='a'
),Javascript会为该值创建一个新的装箱对象,对其进行变异,然后将其丢弃

有关更多详细信息,请参阅


相反,您应该在可变数组中组合新字符串,然后调用
.join(“”)
将其转换为字符串。

您可以通过
replace
和大写函数将元音大写:

newstr = newstr.replace(
           /[aeiou]/g,           // replace all vowels
           function(letter) {    // called for each match
             return letter.toUpperCase();
           }
         );

示例:

您可以通过
replace
和大写函数将元音大写:

newstr = newstr.replace(
           /[aeiou]/g,           // replace all vowels
           function(letter) {    // called for each match
             return letter.toUpperCase();
           }
         );

示例:

您可以创建另一个字符串来构建返回字符串,请参见下面代码中的修复程序

function LetterChanges(str) {
    var alphabet = "abcdefghijklmnopqrstuvwxyza",
        vowels = "aiueo",
        newstr = '',
        returnStr = ''; //added to next step

    for (var i = 0; i < str.length; i++) {
        if (alphabet.indexOf(str[i]) != -1) {
            newstr += alphabet[alphabet.indexOf(str[i]) + 1];
        } else {
            newstr += str[i];
        }  
    }


    for (var i = 0; i < vowels.length; i++) {
        for (var j = 0; j < newstr.length; j++) {
            //toUppercase the vowel in the newstring once found
            if (newstr[j] == vowels[i]) {
                returnStr += newstr[j].toUpperCase(); 
            }else{
                returnStr += newstr[j];
            }
        }
   }
   return returnStr ;
} 
功能字母更改(str){
var alphabet=“abcdefghijklmnopqrstuvxyza”,
元音=“aiueo”,
newstr='',
returnStr='';//已添加到下一步
对于(变量i=0;i
您可以创建另一个字符串来构建返回字符串,请参阅下面代码中的修复程序

function LetterChanges(str) {
    var alphabet = "abcdefghijklmnopqrstuvwxyza",
        vowels = "aiueo",
        newstr = '',
        returnStr = ''; //added to next step

    for (var i = 0; i < str.length; i++) {
        if (alphabet.indexOf(str[i]) != -1) {
            newstr += alphabet[alphabet.indexOf(str[i]) + 1];
        } else {
            newstr += str[i];
        }  
    }


    for (var i = 0; i < vowels.length; i++) {
        for (var j = 0; j < newstr.length; j++) {
            //toUppercase the vowel in the newstring once found
            if (newstr[j] == vowels[i]) {
                returnStr += newstr[j].toUpperCase(); 
            }else{
                returnStr += newstr[j];
            }
        }
   }
   return returnStr ;
} 
功能字母更改(str){
var alphabet=“abcdefghijklmnopqrstuvxyza”,
元音=“aiueo”,
newstr='',
returnStr='';//已添加到下一步
对于(变量i=0;i
您可以通过以下代码轻松生活

     function LetterChanges(str) { 

    return str.replace(/[a-zA-Z]/g,function(x) {
    return String.fromCharCode(x.charCodeAt(0)+1); }).replace(/[aeiou]/g,function(y) {
    return y.toUpperCase(); 
    });

  }

您可以使用以下代码使您的生活变得轻松

     function LetterChanges(str) { 

    return str.replace(/[a-zA-Z]/g,function(x) {
    return String.fromCharCode(x.charCodeAt(0)+1); }).replace(/[aeiou]/g,function(y) {
    return y.toUpperCase(); 
    });

  }


对于元音大写部分,可以使用正则表达式并对字符串调用
newstr=newstr.replace()
,如
.replace(/[aeiou]+/g,function(match){return match.toUpperCase();})
@Ian您应该提供此作为答案,因为它解决了问题。挑战文本似乎有意设置用户失败。以下是一些正确的示例输入和输出。输入=
“hello*3”
Output=
“Ifmmp*3”
Input=
“有趣的时刻!”
Output=
“gvO Ujnft!”
我看到了其他解决方案,发现了该代码的另一个bug。如果输入中有大写字母,则输出不正确。对于元音大写部分,可以使用正则表达式并对字符串调用
newstr=newstr.replace()
,如
.replace(/[aeiou]+/g,function(match){return match.toUpperCase();})
@Ian您应该提供此作为答案,因为它解决了问题。挑战文本似乎有意设置用户失败。以下是一些正确的示例输入和输出。输入=
“hello*3”
Output=
“Ifmmp*3”
Input=
“有趣的时刻!”
Output=
“gvO Ujnft!”
我看到了其他解决方案,发现了该代码的另一个bug。如果输入中有大写字母,则输出不正确。我可以将新字母添加到数组中吗。更改数组中的项。然后把它们连接成一个字符串?这与这个问题没有任何关系@Patrick正在用从
toUpperCase
方法返回的字符串替换数组的元素,因此数组应该保存对字符串的新引用。@Justin什么数组?整个代码中没有一个数组。@Esailija很抱歉,看到方形的brakets使我集中精力在数组上。lol。我可以将新字母添加到数组中吗。更改数组中的项。然后把它们连接成一个字符串?这与这个问题没有任何关系@Patrick正在用从
toUpperCase
方法返回的字符串替换数组的元素,因此数组应该保存对字符串的新引用。@Justin什么数组?整个代码中没有一个数组。@Esailija抱歉,se