有没有办法缩短大部分重复的 if 语句?
Is there a way to shorten a mostly repetitive if statement?
我正在尝试将数字转换为月份。我正在尝试使用 if 语句来做到这一点,例如if(num===0) {month = "January";} else if(num===1) {month = "February";}
等等。有没有办法缩短这个?我想应该是 if(num===[0,1,2,3,4,5]) {month = ["January", "February", "March", "April", "May", "June"}
换句话说,是否有某种方法可以使用带有 if 函数的数组,而 if 函数分别遍历每个数组?顺便说一句,如果这有什么不同的话,我正在使用 p5 库。
您可以使用 switch 语句
var num = 0;
switch (num) {
case 0:
month = "January";
break;
case 1:
month = "February";
break;
case 2:
month = "March";
break;
case 3:
month = "April";
break;
case 4:
month = "May";
break;
case 5:
month = "June";
break;
default:
day = "Unknown Month";
}
阅读更多:https://www.w3schools.com/jsref/jsref_switch.asp
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch
创建一个awk定义如下:
getMonth()
{
awk 'BEGIN{
months=[January,February,March,April,May,June,July,August,September,October,November,December] ;
}{
print months[] ;
}'
}
然后使用调用处理您的输入
month=`echo ${digit} | getMonth `
其中 digit 被分配了一个从 1 到 12 的值。
有比硬编码开关更好的方法。
let locale = 'en-us'
let month = 3 // Apr
let months = [...Array(12).keys()].map(v => new Date(2000, v).toLocaleString(locale, {
month: 'long'
}))
if (months[month]) {
console.log('Do something...')
}
// some other examples
let result;
//
result = months[month] || 'Invalid month index'
console.log('by index', result)
//
result = months[month - 1] || 'Invalid month number'
console.log('by month number', result)
//
result = months.findIndex(v => v === new Date().toLocaleString(locale, { month: 'long' }))
console.log('find index by name', result)
console.log('use index to get name', months[result])
如果您的范围在本质上大部分是连续的,一种方法是预先制作一个同时也是键和值的查找字符串,例如
1:JAN:2:FEB:3:MAR: etc
具有恒定宽度的性质。甚至 1:J:2:F:3:M:4:A….(我的意思是 可行 在那里输入所有的名字,但是你需要一些填充)。
当 then 函数被调用时,使用 match 或 substring 函数的组合来“剪掉”你首先需要的那些,比如“4:APR:5:MAY:6:JUN:7:JUL
”(当你每个使用单个字母时,当 3-5、4-8 和 1-6-7 重复时,你必须用你自己的符号来发挥创造力……或者只使用 base-12)
如果 3 个字母的前缀已经满足你的需要,那么做一个高速 gsub 来去掉所有的数字和分隔符,并将它们更改为逗号或其他东西。
如果你选择完整的月份,我不知道它会有多大帮助,但也许你可以一次将 9-10-11-12 的常见后缀中的正则表达式子化,并且还有1-2。 5已经是它的全名了。
另一种方法是,如果您的范围通常跨越半年以上,那么即使是“减法”方法也可能比“加法”方法更可取 - 总是从完整的字符串开始,拼写出所有月份。然后,对于您输入中缺少的月份,将其空白,然后 return 剩下的。
并说如果你的范围倾向于在一年的同一半年内聚集而不是跨界,那么你甚至可以将该索引键拆分为 2 以使其更快(虽然节省很少)
我认为最好的解决方案是使用这样的月份数组:
const month = [
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
];
const answer = month[num];
我正在尝试将数字转换为月份。我正在尝试使用 if 语句来做到这一点,例如if(num===0) {month = "January";} else if(num===1) {month = "February";}
等等。有没有办法缩短这个?我想应该是 if(num===[0,1,2,3,4,5]) {month = ["January", "February", "March", "April", "May", "June"}
换句话说,是否有某种方法可以使用带有 if 函数的数组,而 if 函数分别遍历每个数组?顺便说一句,如果这有什么不同的话,我正在使用 p5 库。
您可以使用 switch 语句
var num = 0;
switch (num) {
case 0:
month = "January";
break;
case 1:
month = "February";
break;
case 2:
month = "March";
break;
case 3:
month = "April";
break;
case 4:
month = "May";
break;
case 5:
month = "June";
break;
default:
day = "Unknown Month";
}
阅读更多:https://www.w3schools.com/jsref/jsref_switch.asp https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch
创建一个awk定义如下:
getMonth()
{
awk 'BEGIN{
months=[January,February,March,April,May,June,July,August,September,October,November,December] ;
}{
print months[] ;
}'
}
然后使用调用处理您的输入
month=`echo ${digit} | getMonth `
其中 digit 被分配了一个从 1 到 12 的值。
有比硬编码开关更好的方法。
let locale = 'en-us'
let month = 3 // Apr
let months = [...Array(12).keys()].map(v => new Date(2000, v).toLocaleString(locale, {
month: 'long'
}))
if (months[month]) {
console.log('Do something...')
}
// some other examples
let result;
//
result = months[month] || 'Invalid month index'
console.log('by index', result)
//
result = months[month - 1] || 'Invalid month number'
console.log('by month number', result)
//
result = months.findIndex(v => v === new Date().toLocaleString(locale, { month: 'long' }))
console.log('find index by name', result)
console.log('use index to get name', months[result])
如果您的范围在本质上大部分是连续的,一种方法是预先制作一个同时也是键和值的查找字符串,例如
1:JAN:2:FEB:3:MAR: etc
具有恒定宽度的性质。甚至 1:J:2:F:3:M:4:A….(我的意思是 可行 在那里输入所有的名字,但是你需要一些填充)。
当 then 函数被调用时,使用 match 或 substring 函数的组合来“剪掉”你首先需要的那些,比如“4:APR:5:MAY:6:JUN:7:JUL
”(当你每个使用单个字母时,当 3-5、4-8 和 1-6-7 重复时,你必须用你自己的符号来发挥创造力……或者只使用 base-12)
如果 3 个字母的前缀已经满足你的需要,那么做一个高速 gsub 来去掉所有的数字和分隔符,并将它们更改为逗号或其他东西。
如果你选择完整的月份,我不知道它会有多大帮助,但也许你可以一次将 9-10-11-12 的常见后缀中的正则表达式子化,并且还有1-2。 5已经是它的全名了。
另一种方法是,如果您的范围通常跨越半年以上,那么即使是“减法”方法也可能比“加法”方法更可取 - 总是从完整的字符串开始,拼写出所有月份。然后,对于您输入中缺少的月份,将其空白,然后 return 剩下的。
并说如果你的范围倾向于在一年的同一半年内聚集而不是跨界,那么你甚至可以将该索引键拆分为 2 以使其更快(虽然节省很少)
我认为最好的解决方案是使用这样的月份数组:
const month = [
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
];
const answer = month[num];