2017-06-23 43 views
2

有没有更优雅的方式呢?寻找优雅如果

if (err.code === 'CONFLICT-GROUP-GENERAL' || 
    err.code === 'CONFLICT-USER-GENERAL' || 
    err.code === 'CONFLICT-FORM-GENERAL' || 
    err.code === 'CONFLICT-PROJECT-GENERAL' || 
    err.code === 'CONFLICT-TEMPLATE-GENERAL') {} 
+1

正确的解决方案取决于“{}”之间的内容。 –

+1

我会使用[switch](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch)。 – James

回答

3

这招在我看来,更优雅(使用数组和indexOf ):

var conflicts = ['CONFLICT-GROUP-GENERAL', 
        'CONFLICT-USER-GENERAL', 
        'CONFLICT-FORM-GENERAL', 
        'CONFLICT-PROJECT-GENERAL', 
        'CONFLICT-TEMPLATE-GENERAL']; 

if (conflicts.indexOf(err.code) !== -1) { 
    doSomething(); 
} 

如果您正在使用ES7那么你可以使用includes()而不是indexOf。这将是更多的“表现”:

var conflicts = ['CONFLICT-GROUP-GENERAL', 
        'CONFLICT-USER-GENERAL', 
        'CONFLICT-FORM-GENERAL', 
        'CONFLICT-PROJECT-GENERAL', 
        'CONFLICT-TEMPLATE-GENERAL']; 

if (conflicts.inclues(err.code)) { 
    doSomething(); 
} 

注意includes()不会被所有浏览器都支载。

编辑:

另一种替代方法:使用switch。这种方式:

switch (err.code) { 
    case 'CONFLICT-GROUP-GENERAL',: 
    case 'CONFLICT-USER-GENERAL',: 
    case 'CONFLICT-FORM-GENERAL',: 
    case 'CONFLICT-PROJECT-GENERAL',: 
    case 'CONFLICT-TEMPLATE-GENERAL': 
     doSomething(); 
     break; 
} 

err.code等于在每一特定case串中的一个上面的代码将执行doSomething()功能。

6

我会用数组更好所有的代码,并使用indexOf检查,如果它比-1更大:

if (['CONFLICT-GROUP-GENERAL', 'CONFLICT-USER-GENERAL', 'CONFLICT-FORM-GENERAL', 'CONFLICT-PROJECT-GENERAL', 'CONFLICT-TEMPLATE-GENERAL'].indexOf(err.code) > -1) { 
} 
+2

或'includes()' –

+0

@PranavCBalan在旧版浏览器中不支持吗?对于新的浏览器,反正是 –

+1

;) –

相关问题