能否为三元运算符添加多条件?如何一行实现元音首字母a/an判断
一行代码实现三元运算符判断元音首字母选择"an"/"a"
你之前的写法逻辑有误:(careers[careersIndex].slice(0,1) === 'a' || 'A' || 'e' || 'i' || 'I' ? 'an' : 'a')里,||后面的'A'等非空字符串会被直接判定为true,所以不管首字母是什么,表达式都会返回true,导致永远输出"an"。
下面是两种可行的一行实现方案:
方案1:数组结合includes(直观易读)
把首字母转成小写后,判断是否在元音数组中:
${['a', 'e', 'i', 'o', 'u'].includes(careers[careersIndex].charAt(0).toLowerCase()) ? 'an' : 'a'}
方案2:正则表达式(更简洁)
用忽略大小写的正则匹配字符串开头的元音:
${/^[aeiou]/i.test(careers[careersIndex]) ? 'an' : 'a'}
修改后的完整代码
const containerEl = document.querySelector(".container"); const careers = [ "Youtuber", "Web Designer", "Frontend", "Astronaut", "Geek", "armrest", ]; let careersIndex = 0; let charIndex = 0; updateText(); function updateText() { charIndex++; // 这里替换成上面的任意一种方案即可 containerEl.innerHTML = `<h1>I am ${/^[aeiou]/i.test(careers[careersIndex]) ? 'an' : 'a'} ${careers[careersIndex].slice(0, charIndex)}</h1>`; if (charIndex === careers[careersIndex].length) { careersIndex++; charIndex = 0; } if (careersIndex === careers.length) { careersIndex = 0; } setTimeout(updateText, 300); }
内容的提问来源于stack exchange,提问作者Sam bakhtiari
相关产品推荐
相关产品推荐

