我正试着写一个程序,从一个字符串中删除每个元音的第一个示例。
“敏捷的棕色狐狸跳过懒惰的狗”变成了“快速的棕色狐狸跳过懒惰的狗”
这是我的代码看起来像以前(评论下一个)
str = "the quick brown fox jumps over the lazy dog"
letters = ['a', 'e', 'i', 'o', 'u']
i = 0
j = 0
strArr = str.split('') // converts word to string
vowel = letters[i]
// replaceVowel = str.replace(letters.indexOf(i), '');
while (i < str.length || j == 5)
if (strArr[i] == letters[j] ) {
console.log('I found ' + letters[j])
i = 0
j++
}
else if (strArr[i] !== letters[j]){
i++
}
strArr.join()
console.log(str);
我的想法是将字符串转换为一个split
数组,然后将字符串的索引与字母数组[aeiou]进行比较,并检查第一个元音。第一个'a'被替换为空格,然后检查下一个元音('e')。这一过程一直持续到j=5,因为当j=5时,循环将在检查完'u'后退出。
然后,我将代码修改为:
str = "the quick brown fox jumps over the lazy dog"
letters = ['a', 'e', 'i', 'o', 'u']
index = 0
j = 0
strArr = str.split('') // converts word to string
vowel = letters[index]
while (index < strArr.length && j !== 5)
// Where j references the vowels
if (strArr[index] == letters[j]) {
strArr.splice(index, '')
index = 0
j++
// j++ to cycle through vowels after the first
// instance has been repaced
}
else if (strArr[index] !== letters[j]){
index++
// Cycle through the string until you find a vowel
}
else if (strArr[index] == str.length && j!== 6) {
index = 0
j++
// If you hit the end of the string and couldn't find
// a vowel, move onto the next one
}
strArr.join()
console.log(str);
我运行的时候什么React都没有,不知道是不是我的逻辑有问题?
如果还有更简单的方法来做到这一点,请通知我。
非常感谢您的指导!
3条答案
按热度按时间wnrlj8wa1#
我一开始就误解了这个问题,但这里有一个示例,它只是简单地迭代一个元音数组,并使用
String#indexOf()
查找索引,使用String#slice()
从结果字符串中切割每个元音的第一个。另一种解决方案是迭代字符串中的每个字符,并将其与元音的
Set
进行检查,如果找到则删除元音,否则将该字符添加到结果字符串中。这里使用三进制对Set.delete()
进行检查,如果值在Set中则返回true,否则返回false。原始答案
我最初的答案假设您希望删除每个单词的第一个元音(正如已接受的答案所做的那样),您可以通过使用RegExp调用一个
replace()
来实现这一点(注意,这将使quick
中只剩下i
,因为u
是该单词的第一个元音)。pprl5pva2#
这里已经有了一些答案,这是一个替代方法:
使用
.exec()
我们可以得到索引。现在,让我们删除它:
nkoocmlb3#
可以用空格分隔字符串,然后用
map
分隔整个数组。要删除元音,请将字符串转换为数组,并使用
findIndex
查找vowels
包含的第一个字符,然后删除该项。