2015-04-19 2 views
1

Есть ли более элегантный способ настройки этих свойств? Это утверждение if может стать уродливым к тому времени, когда я закончу все различные сценарии. Я также пытаюсь избежать заявлений о случаях.Назначение свойств объекта Javascript

if(arrResponse.length>2){ 
    objResponse = { 
     type : evl_ResponseType[arrResponse[0]].name, 
     partition : evl_Partition_Status_Code[arrResponse[1]].description, 
     icons : iconLED(bin(arrResponse[2]).result), 
     numeric : arrResponse[3], 
     beeps : BEEP_field[arrResponse[4]], 
     msg : arrResponse[5].replace('$','').trim()}; 
    } 
else { 
    objResponse = { 
     type : evl_ResponseType[arrResponse[0]].name; 
    } 
} 
return objResponse; 
+0

Создать объект по var objResponse = {}; Затем присвойте свойства objResponse.probName = value; –

+0

Различные объекты 'evl_' - словари, а' arrResponse' содержит ключи в этом словаре, которые используются для поиска фактических значений, на которые вы хотите висеть? –

+2

И когда вы говорите «закончить все различные сценарии» ... можете ли вы привести пример того, что осталось? Это упростит поиск общей картины. –

ответ

3

Ну, вы могли сделать это:

objResponse = { 
    type : evl_ResponseType[arrResponse[0]].name; 
}; 
if(arrResponse.length>2){ 
    objResponse.partition = evl_Partition_Status_Code[arrResponse[1]].description; 
    objResponse.icons = iconLED(bin(arrResponse[2]).result); 
    objResponse.numeric = arrResponse[3]; 
    objResponse.beeps = BEEP_field[arrResponse[4]]; 
    objResponse.msg = arrResponse[5].replace('$','').trim(); 
} 
return objResponse; 

Но я не думаю, что я бы назвал его более элегантным.

Если вы не возражаете свойства существующих, даже если они не имеют полезные значения, вы могли бы сделать это:

objResponse = { 
    type : evl_ResponseType[arrResponse[0]].name; 
    partition : arrResponse.length>2 && evl_Partition_Status_Code[arrResponse[1]].description, 
    icons : arrResponse.length>2 && iconLED(bin(arrResponse[2]).result), 
    numeric : arrResponse.length>2 && arrResponse[3], 
    beeps : arrResponse.length>2 && BEEP_field[arrResponse[4]], 
    msg : arrResponse.length>2 && arrResponse[5].replace('$','').trim() 
}; 
return objResponse; 

свойства будет иметь значение false если условие предваряя их не встретил.

Это также имеет то преимущество, что вы можете адаптировать условия к используемому вами индексу (например, используя arrResponse.length > 5, когда вы собираетесь использовать arrResponse[5] для msg).


Side Примечание: Ваш код не приписывая partition если arrResponse.length не >2, но значение вы присваивание partition есть даже если arrResponse.lengthравен2.

+0

Сделайте смысл улучшить читаемость, создав функции. Например, функция getPartition() {return arrResponse.length> 2 && evl_Partition_Status_Code [arrResponse [1]]. Description; } и использовать его.Немного больше кода для написания, но тогда его будет легко читать и понимать. Я лично предпочитаю переместить большой объем кода из оператора IF в функции и затем использовать их. Такой способ я могу понять логику, не глядя в деталях. Во всяком случае, поднял ответ :) –

+0

Спасибо, ваш ответ помог. –

1

Почему бы не просто использовать сокращенное обозначение? Он выглядит лучше, сохраняя при этом текущую структуру.

objResponse = arrResponse.length > 2 ? { 
    type: evl_ResponseType[arrResponse[0]].name, 
    partition: evl_Partition_Status_Code[arrResponse[1]].description, 
    icons: iconLED(bin(arrResponse[2]).result), 
    numeric: arrResponse[3], 
    beeps: BEEP_field[arrResponse[4]], 
    msg: arrResponse[5].replace('$', '').trim() 
} : { 
    type: evl_ResponseType[arrResponse[0]].name; 
} 
return objResponse; 
+3

Уродливый и нечитаемый код ... –

+0

благодарит вас за ваше мнение @AlexanderRavikovich – Shawn31313

+1

«Уродливый» - это немного субъективная вещь. Не назвал бы его особенно нечитаемым, и я не самый лучший при чтении кода. –

Смежные вопросы