你会用哪种模式来解决这种表达方式?

时间:2015-08-07 08:16:18

标签: javascript design-patterns

我有多个状态和多个值,好吧,我可以使用一个函数,如果是逻辑,但是想知道你对哪种设计模式或实现更适合这种类型的看法:

item.status == 'upcoming' ? 
     'label-upcoming' : 
        ( item.type == 'ticket_required' && 
            item.status == 'available' && 
              item.hasTicket == true ? 
                 'label-ticket' : '')

我不想要解决方案,只是学习一些技巧。提前致谢

2 个答案:

答案 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}(?= |$) ”来维护。