javascript 删除元音的第一个示例

xuo3flqw  于 2023-01-04  发布在  Java
关注(0)|答案(3)|浏览(144)

我正试着写一个程序,从一个字符串中删除每个元音的第一个示例。
“敏捷的棕色狐狸跳过懒惰的狗”变成了“快速的棕色狐狸跳过懒惰的狗”
这是我的代码看起来像以前(评论下一个)

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都没有,不知道是不是我的逻辑有问题?
如果还有更简单的方法来做到这一点,请通知我。
非常感谢您的指导!

wnrlj8wa

wnrlj8wa1#

我一开始就误解了这个问题,但这里有一个示例,它只是简单地迭代一个元音数组,并使用String#indexOf()查找索引,使用String#slice()从结果字符串中切割每个元音的第一个。

const str = 'the quick brown fox jumps over the lazy dog';

let result = str;
for (const vowel of ['a', 'e', 'i', 'o', 'u']) {
  const vowelIndex = result.indexOf(vowel);
  result = result.slice(0, vowelIndex) + result.slice(vowelIndex + 1);
}

console.log(result);
// th qck brwn fox jumps over the lzy dog

另一种解决方案是迭代字符串中的每个字符,并将其与元音的Set进行检查,如果找到则删除元音,否则将该字符添加到结果字符串中。这里使用三进制对Set.delete()进行检查,如果值在Set中则返回true,否则返回false。

const str = 'the quick brown fox jumps over the lazy dog';

const vowels = new Set(['a', 'e', 'i', 'o', 'u']);

let result = '';
for (const char of str) {
  result += vowels.delete(char) ? '' : char;
}

console.log(result);
// th qck brwn fox jumps over the lzy dog
原始答案

我最初的答案假设您希望删除每个单词的第一个元音(正如已接受的答案所做的那样),您可以通过使用RegExp调用一个replace()来实现这一点(注意,这将使quick中只剩下i,因为u是该单词的第一个元音)。

const str = 'the quick brown fox jumps over the lazy dog';
const result = str.replace(/(\b[^aeiou]*)[aeiou](\w*\b)/gi, '$1$2');

console.log(result);
// th qick brwn fx jmps ver th lzy dg
pprl5pva

pprl5pva2#

这里已经有了一些答案,这是一个替代方法:

function getIndex(string, expression) {
    let position = expression.exec(string);
    if (position === null) return null;
    return position.index;
}

function getVowelIndex(string) {
    return getIndex(string, /[aeiou]/i);
}

let testCases = [
    "Something has gone wrong",
    "Or not",
    "Breaking news",
    "pfft!",
    "brkn leg",
    "I can't dance"
];

for (let testCase of testCases) {
    console.log(testCase + ": ", getVowelIndex(testCase));
}

使用.exec()我们可以得到索引。
现在,让我们删除它:

function getIndex(string, expression) {
    let position = expression.exec(string);
    if (position === null) return null;
    return position.index;
}

function getVowelIndex(string) {
    return getIndex(string, /[aeiou]/i);
}

let testCases = [
    "Something has gone wrong",
    "Or not",
    "Breaking news",
    "pfft!",
    "brkn leg",
    "I can't dance"
];

for (let testCase of testCases) {
    let result = testCase;
    let position = getVowelIndex(testCase);
    if (position !== null) result = result.substring(0, position) + result.substring(position + 1);
    console.log(testCase + ": ", result);
}
nkoocmlb

nkoocmlb3#

可以用空格分隔字符串,然后用map分隔整个数组。
要删除元音,请将字符串转换为数组,并使用findIndex查找vowels包含的第一个字符,然后删除该项。

const str = `the quick brown fox jumps over the lazy dog`
const vowels = ['a', 'e', 'i', 'o', 'u']
const result = str.split(' ').map(e => {
  const arr = [...e]
  return arr.splice(arr.findIndex(c => vowels.includes(c)), 1), arr.join('')
})
console.log(result.join(' '))

相关问题