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