分配 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.