if (args.join(" ").toLowerCase() === "are you" || args.join(" ").toLowerCase() === "are you doing")
正如您所看到的,我使用两个非常相似的线条或一个案例。有没有更短的方法来做到这一点?
答案 0 :(得分:10)
["are you", "are you doing"].includes(args.join(" ").toLowerCase())
这个解决方案的好处是args.join(" ").toLowerCase()
只执行一次而且它非冗长,同时仍然富有表现力且易于理解。
它也很容易扩展。如果您想要验证更多字符串,只需将这些字符串添加到数组中即可。
答案 1 :(得分:3)
您可以使用Array.some()重写复杂的OR条件。
它允许您添加任意数量的检查值而无需重复 你自己太多了。
if (['are you', 'are you doing'].some(i => i === 'are you doing')) {
console.log('passes')
}
if (['are you', 'are you doing'].some(i => i === 'are you')) {
console.log('passes')
}

答案 2 :(得分:1)
lc
if
if ((lc = args.join(" ").toLowerCase()) === "are you" || lc === "are you doing"){
}
答案 3 :(得分:1)
由于你的值相似/相关并且是字符串,我会使用正则表达式
function test(...args){
return /are you( doing)?/.test(args.join(" "))
}
console.log(test("are", "you", "doing"))
console.log(test("are", "you"))
console.log(test("are", "yo"))
答案 4 :(得分:0)
事先做好连接和套管:
let lc = args.join(" ").toLowerCase();
if(lc === "are you" || lc === "are you doing"){
}
答案 5 :(得分:0)
您可以使用变量say @echo off
setlocal EnableExtensions DisableDelayedExpansion
rem // Define constants here:
set "_ROOT=C:\Temp\Corporate Services"
set "_NAME=Registers"
set "_PREF=(REG)"
rem // Enumerate immediate child directories of root directory:
for /D %%A in ("%_ROOT%\*") do (
rem // Try to change into certain grand-child directory:
2> nul pushd "%%~A\%_NAME%" && (
rem // Enumerate grand-grand-child directories recursively and filter them:
for /F "delims=" %%C in ('
2^> nul dir /S /B /A:D "*" ^| findstr /I /V /R /C:"\\%_PREF%[^\\]*$"
') do (
rem // Rename directories that have not yet been:
ECHO ren "%%~C" "%_PREF%%%~nxC"
)
rem // Return from grand-child directory:
popd
)
)
endlocal
exit /B
来保存小写值并缩短代码,并将text
操作减少为仅执行一次。
join()
查看代码似乎var text = args.join(" ").toLowerCase();
if (text === "are you" || text === "are you doing"){
...
}
是您需要在最高级别检查的内容,因此您也可以使用are you
来检查该文本值仅
indexOf()