分配Javascript对象属性

时间:2015-04-19 17:40:16

标签: javascript javascript-objects

是否有更优雅的方式来分配这些属性?当我完成所有各种场景时,这个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;   

2 个答案:

答案 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;