分配 Javascript 对象属性
Assigning Javascript Object Properties
是否有更优雅的方式来分配这些属性?当我完成所有各种场景时,这个 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;
为什么不直接使用 shorthand?它看起来更好,同时仍然保持您当前的结构真实。
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;
好吧,你可以这样做:
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
。
这还有一个好处,就是您可以根据您正在使用的索引调整条件(例如,当您打算对 msg
使用 arrResponse[5]
时使用 arrResponse.length > 5
).
旁注:如果 arrResponse.length
不是 >2
,则您的代码未分配给 partition
,但您分配给 partition
的值甚至存在如果 arrResponse.length
等于 2
.
是否有更优雅的方式来分配这些属性?当我完成所有各种场景时,这个 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;
为什么不直接使用 shorthand?它看起来更好,同时仍然保持您当前的结构真实。
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;
好吧,你可以这样做:
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
。
这还有一个好处,就是您可以根据您正在使用的索引调整条件(例如,当您打算对 msg
使用 arrResponse[5]
时使用 arrResponse.length > 5
).
旁注:如果 arrResponse.length
不是 >2
,则您的代码未分配给 partition
,但您分配给 partition
的值甚至存在如果 arrResponse.length
等于 2
.