我写了这个函数来记录给定字符串中的一个新字符串,其中字母应该是字母表中的下一个字母,所有元音都是大写的。
现在我遇到了无法按照我想要的方式拆分字符串的问题。现在,当我真的希望在白色空间上分割字符串时,单词将被分成数组中的单独字符。有人可以解释为什么会这样吗?
当我在分割方法中的“”之间放置一个空格时,我只得到所有字符,并且“未定义”应该是白色空格。谢谢你的帮助!
function replace(str) {
var newStr = [];
var vowels = 'aeiou';
var alpha = [ 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'
];
str = str.split("");
newStr.length = str.length;
for(var i = 0; i < alpha.length; i++) {
for(var j = 0; j < str.length; j++) {
if(alpha[i] === str[j]) {
newStr[j] = (alpha[i + 1]);
}
}
}
for(var k = 0; k < vowels.length; k++) {
for(var x =0; x < newStr.length; x++){
if(vowels[k] === newStr[x]) {
newStr[x] = vowels[k].toUpperCase("");
}
}
}
return newStr;
}
console.log(replace("today is great"));
答案 0 :(得分:0)
要在空格上拆分字符串,请尝试:
str = str.split(/\s+/);
答案 1 :(得分:0)
str = str.split(" ");
这会将你的字符串分成[“今天”,“是”,“很棒”]。
当你到达 p>
if(alpha[i] === str[j]) {
你永远不会进入if块,因为你正在比较“a”到“今天”或“a”到“是”等等。我认为你需要更多地打破你的字符串来完成这个。
我提出的建议如下:
function replace(str) {
var alpha = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'],
vowels = 'aeiou',
newStr = [],
i, j, k;
// split everything into words
str = str.split(' ');
for (i = 0; i < str.length; i++) {
// split everything into letters
str[i] = str[i].split('');
// make sure newStr has a similarly construction to str
newStr[i] = [];
for (j = 0; j < str[i].length; j++) {
for (k = 0; k < alpha.length; k++) {
if (alpha[k] === str[i][j]) {
// subsitute each letter
newStr[i][j] = alpha[k + 1];
}
}
}
}
for (i = 0; i < newStr.length; i++) {
// join newStr up to be an array of words instead of an array of an array of letters
newStr[i] = newStr[i].join('');
for (k = 0; k < vowels.length; k++) {
// replace each vowel with the uppercase version
newStr[i] = newStr[i].replace(vowels[k], vowels[k].toUpperCase());
}
}
return newStr;
}
如果你真的想看“UpEbz jt hsfbU”而不是[“UpEbz”,“jt”,“hsfbU”],只需更改return newStr返回newStr.join('');