是否有更优雅的方式来分配这些属性?当我完成所有各种场景时,这个if语句会变得丑陋。我也试图避免个案陈述。
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 :(得分: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
}})。
附注:如果partition
不是arrResponse.length
,您的代码并未分配给>2
,但您分配给partition
的值是即使arrResponse.length
等于 2
。
答案 1 :(得分: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;