You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JavaScript删除单词中首次出现的元音?代码故障排查

问题:删除单词中首次出现的元音的JS函数无效

我正在开发一款JavaScript程序,目标是删除单词中首次出现的元音。示例如下:

原文本:quick brown fox jumps over the lazy dog
预期输出:th qck brwn fox jumps over the lzy dog

但编写的disappearString函数始终输出原句子,无任何修改,相关代码及测试用例如下:

disappearString = (myString, toErase) => {

let newString = myString.split();
let newErase = toErase.split();

for(let i = 0; i < newString.length; i++){
    if(newString[i] === newErase[i]){
        console.log(newString.delete(toErase[i]));
    }
}

return newString.join();
}



let testStrings = [
"the quick brown fox jumps over the lazy dog",
"hello world",
"software engineering is fun",
"i like javascript",
"clown case",
"rhythms"
]

let stringToDisappear = "aeiou"

let correctStrings = [
"th qck brwn fox jumps over the lzy dog",
"hll world",
"sftwr engneering is fn",
" lik jvascript",
"clwn cs",
"rhythms"
]

for (let strIdx = 0; strIdx < testStrings.length; strIdx++) {
let test = testStrings[strIdx];
let correct = correctStrings[strIdx];

let got = disappearString(test, stringToDisappear);

if (got == correct) {
    console.log(`${strIdx + 1}: Testing ${test}: Correct!`);
} else {
    console.log(`${strIdx + 1}: Testing ${test}: Wrong, got ${got}, expected ${correct}`);
}
}

原代码的问题分析

  • 拆分字符串错误:split()无参数时不会拆分字符或单词,会返回仅包含原字符串的数组。按单词拆分需用split(' '),按字符拆分需用split('')。
  • 循环逻辑错误:遍历数组索引i时,newString[i](原字符串整体或单词)与newErase[i](元音字符)的索引对应关系不成立,无法匹配到目标元音。
  • 数组操作错误:JavaScript数组没有delete方法,使用delete仅会将元素设为undefined,不会真正删除元素;修改数组应使用splice或过滤方法。
  • 未按需求处理单个单词:需求是删除每个单词中首次出现的元音,必须先拆分出每个单词,单独处理后再拼接成句子。

修正后的代码

const disappearString = (myString, toErase) => {
    // 按空格拆分单词
    const words = myString.split(' ');
    // 转换元音字符串为Set,提升查找效率
    const vowels = new Set(toErase.split(''));
    
    // 逐个处理单词:删除第一个出现的元音
    const processedWords = words.map(word => {
        for (let i = 0; i < word.length; i++) {
            if (vowels.has(word[i])) {
                // 截取元音前后的字符并拼接,实现删除效果
                return word.slice(0, i) + word.slice(i + 1);
            }
        }
        // 单词无元音时直接返回原单词
        return word;
    });
    
    // 拼接处理后的单词为完整句子
    return processedWords.join(' ');
}

// 测试用例保持不变
let testStrings = [
"the quick brown fox jumps over the lazy dog",
"hello world",
"software engineering is fun",
"i like javascript",
"clown case",
"rhythms"
]

let stringToDisappear = "aeiou"

let correctStrings = [
"th qck brwn fox jumps over the lzy dog",
"hll world",
"sftwr engneering is fn",
" lik jvascript",
"clwn cs",
"rhythms"
]

for (let strIdx = 0; strIdx < testStrings.length; strIdx++) {
let test = testStrings[strIdx];
let correct = correctStrings[strIdx];

let got = disappearString(test, stringToDisappear);

if (got == correct) {
    console.log(`${strIdx + 1}: Testing ${test}: Correct!`);
} else {
    console.log(`${strIdx + 1}: Testing ${test}: Wrong, got ${got}, expected ${correct}`);
}
}

修正说明

  1. 拆分与拼接逻辑:用split(' ')拆分单词,处理完成后用join(' ')拼接回完整句子。
  2. 元音查找优化:将元音字符串转换为Set,大幅提升字符查找效率。
  3. 单词处理逻辑:对每个单词遍历字符,找到第一个元音后用slice方法截取并拼接前后部分,实现删除第一个元音的效果;无元音的单词直接返回。
  4. 语法规范:使用const声明常量,避免不必要的变量重赋值,符合现代JavaScript开发规范。

内容的提问来源于stack exchange,提问作者FreddyKruger75

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 10:33:14