2017-04-15 77 views
3

在Javascript中,有沒有辦法實現類似這樣的事情?使用字符串「包括()」在開關JavaScript案例

const databaseObjectID = "someId"; // like "product/217637" 

switch(databaseObjectID) { 
    case includes('product'): actionOnProduct(databaseObjectID); break; 
    case includes('user'): actionOnUser(databaseObjectID); break; 
    // .. a long list of different object types 
} 

這更多的是好奇的問題,瞭解開關/箱的可能性,因爲在這種特殊情況下,我已經使用const type = databaseObjectID.split('/')[0];解決我的問題和type

回答

1

您的使用情況將被視爲濫用案例。

,而不是僅僅使用IFS

 if (databaseObjectId.includes('product')) actionOnProduct(databaseObjectID); 
else if (databaseObjectId.includes('user')) actionOnUser(databaseObjectID); 
// .. a long list of different object types 

如果的ObjectId包含產品或用戶周圍的靜態內容,您可以將其刪除,並使用用戶或產品作爲重點:

var actions = { 
    "product":actionOnProduct, 
    "user" :actionOnUser 
} 

actions[databaseObjectId.replace(/..../,"")](databaseObjectId); 
+0

第一個命題不適合我,因爲我的規則不允許我進行這種表示,並且我希望避免每個數據類型有兩行。然而,第二個主張很適合我......謝謝! –

5

這將工作中使用的開關情況,但它不應該在實踐中使用。

const databaseObjectID = "someId"; // like "product/217637" 

switch(true) { 
    case databaseObjectID.includes('product'): actionOnProduct(databaseObjectID); break; 
    case databaseObjectID.includes('user'): actionOnUser(databaseObjectID); break; 
    // .. a long list of different object types 
} 
+1

爲什麼不在實踐中使用它? –

+0

因爲它是一種黑客攻擊,並不一定比一組if/elseifs更容易閱讀,因爲缺少這種突破使得代碼更短。 – mplungjan

+0

謝謝。實際上,我不想使用一套if/elseif,就像我平常的linting規則一樣,我會結束每個if/elseif使用兩行。由於我的數據類型列表可能很長,因此我正在尋找每種類型只有一行的東西。 –

0

對不起,我是一個noob,所以有人可能不得不清理這個,但這是主意。傳遞給一個函數來檢查並返回一個類別,然後使用該開關。

function classify(string){ 
    var category = categorize(string); 
    switch (category) { 
    case 'product': 
     console.log('this is a product'); 
     break; 
    case 'user': 
     console.log('this is a user'); 
     break; 
    default: 
     console.log('category undefined');  
    } 
} 

function categorize(string){ 
    if (string.includes('product')){ 
    return 'product'; 
    } 
    if (string.includes('user')){ 
    return 'user'; 
    } 
} 
var string1 = "product789"; 
var string2 = "user123"; 
var string3 = "test567"; 

classify(string1); 
classify(string2); 
classify(string3); 

對不起,因爲不符合你的例子。