我有多个状态和多个值,好吧,我可以使用一个函数,如果是逻辑,但是想知道你对哪种设计模式或实现更适合这种类型的看法:
item.status == 'upcoming' ?
'label-upcoming' :
( item.type == 'ticket_required' &&
item.status == 'available' &&
item.hasTicket == true ?
'label-ticket' : '')
我不想要解决方案,只是学习一些技巧。提前致谢
答案 0 :(得分:4)
由于您在此处为item.status
合并了多个条件,因此立即查找的对象文字可能很方便:
({
'upcoming': 'label-upcoming',
'available': item.type == 'ticket_required' && item.hasTicket && 'label-ticket'
}[item.status] || '')
(虽然在这种情况下它很难看,因为你在对象内部有一个复杂的表达式,即使没有选择键也必须每次都进行评估,并且从那里默认为{{1很难理解)。尽管如此,它应该是一个你应该知道的模式:-)为了使它更高效,将对象文字放在一个静态的位置以避免创建新对象。如果您需要它更灵活,请输入功能而不是键:
''
当然,你总是可以使用IIFE:
// Using ES6 syntax for conciseness, works with ES5 function expression just as well
const lookup = {
'upcoming': (_) => 'label-upcoming',
'available': (item) => item.type == 'ticket_required' && item.hasTicket ? 'label-ticket' : ''
};
… (lookup[item.status] || (_)=>'')(item) …
答案 1 :(得分:1)
这很紧凑但很难阅读,我更倾向于使用“(?<=^| )\d{7}(?= |$)
”来维护。