2017-04-15 6 views
3

Javascriptでは、これに似た何かを達成する方法はありますか?スイッチのJavascriptの場合、文字列「includes()」を使用

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

この使用法は、大文字と小文字を区別するとみなされます。

代わりにただのObjectIdが、製品や利用者の周りの静的なコンテンツが含まれている場合、あなたはそれを削除し、キーとしてユーザーまたは製品を使用することができます

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

IFS使用:

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

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

最初の命題は、私の糸くずれのルールでは私がそのようなプレゼンテーションをすることができないため、私には合いません。データ型ごとに2行を避けたいのです。しかし、2番目の提案は私によく合います...ありがとう! –

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

実際には、私は通常のlintingの規則と同様にif/elseifのセットを使いたくないので、if/elseifごとに2行を使用して終了します。私のデータ型リストは潜在的に長いので、タイプごとに1行しかないものを探していました。 –

0

申し訳ありませんが、私は騒ぎですので、誰かがこれをきれいにしなければならないでしょうが、ここには考えがあります。カテゴリをチェックして返す関数に渡し、スイッチを使用します。

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); 

申し訳ありませんが、あなたの例と一致しないためです。