2016-01-13 3 views
0

У меня есть следующая функция, где я жестко код if таких условий, как 'AssignedTo','ClaimStatusId','ClaimTypeId'.Написание обобщенного кода

Так, строка strCondition имеет одно из значений, как 'AssignedTo','ClaimStatusId','ClaimTypeId', то он будет перенаправлен на соответствующий if условия

function ChangeIDToString(strCondition,id) 
    { 
     if (strCondition.indexOf("AssignedTo") > -1) 
      return GetUserName(id) 
     else if (strCondition.indexOf("ClaimStatusId") > -1) 
      return GetClaimStatus(id) 
     else if (strCondition.indexOf("ClaimTypeId") > -1) 
      return GetClaimType(id);   
     else 
      return id; 
    } 

Есть ли способ я могу устранить эти жестко закодированные значения, как «AssignedTo» , 'ClaimStatusId', 'ClaimTypeId'?

+0

Является ли strCondition массив типов? –

+0

Передайте 'id' и' strvalue' в один аргумент, а затем разделите. Как 'ClaimStatusId_ {id}' –

ответ

0

Такой подход?

function ChangeIDToString(strCondition,id) 
    { 
     return _func[strCondition](); 
    } 

var _func = { 
    "AssignedTo":function(){ GetUserName(); }, 
    "ClaimStatusId":function(){ GetClaimStatus(); } 
    .... 
} 
+0

Тем не менее, в _func есть жесткий код – SmartestVEGA

0

Вы можете попробовать использовать объект для хранения строковых значений, конечно, по-прежнему жестко, потому что это невозможно, что машина понимает, что нужно выполнить «GetUserName()», когда условие " AssignedTo».

var Conditions = { 
    GetUserName: "AssignedTo", 
    GetClaimStatus: "ClaimStatusId", 
    GetClaimType: "ClaimTypeId" 
} 
function ChangeIDToString(strCondition,id) 
{ 
    if (strCondition.indexOf(Conditions.GetUserName) > -1) 
     return GetUserName(id) 
    else if (strCondition.indexOf(Conditions.GetClaimStatus) > -1) 
     return GetClaimStatus(id) 
    else if (strCondition.indexOf(Conditions.GetClaimType) > -1) 
     return GetClaimType(id);   
    else 
     return id; 
}