2

在以下代码片段中,

var paintMode = data.hasOwnProperty('regions') ?
        'regions' : data.hasOwnProperty('vpcs') ?
        'vpcs' : data.hasOwnProperty('zones') ? 
        'zones' : data.hasOwnProperty('subnets') ? 
        'subnets' : data.hasOwnProperty('clusters') ? 'clusters' : null;

我使用了深度嵌套(condition) ? true : false——这可以接受吗?优化了吗?如果它不好,还有其他选择吗?

它在执行一些 SVG 操作的递归函数中使用,如果您好奇,这里是函数片段。

function paintGroups(data) {
    var paintMode = data.hasOwnProperty('regions') ? 'regions' : data.hasOwnProperty('vpcs') ? 'vpcs' : data.hasOwnProperty('zones') ? 'zones' : data.hasOwnProperty('subnets') ? 'subnets' : data.hasOwnProperty('clusters') ? 'clusters' : null,
        depth = data[paintMode].length,
        i,
        Shape; //= raphealObj.rect();

    // Register stacking order
    // Paint a shape with styles based on paintMode
    // Store its id & Label for other ops.

    if(paintMode) {
        for(i = 0; i < depth; i++) {
            paintGroups(data[paintMode][i]);
        }
    }

    // to reverse the order of paint - place your statements here
}
4

1 回答 1

1

一般来说,由于分支预测、缓存、yada yada yada,使用二进制操作应该比使用分支的条件语句更快。但是你的代码很好。我喜欢 && || 但这只是一种偏好,而不是基于任何经验。

var data = {a: 1, b: 2, c: 3};
var result = data.x || 
    data.y && "y" || 
    data.z && "z" || 
    data.w && "w" ||
    null;

我不想输入 .hasOwnProperty。

编辑在实际查看您的代码之后

var paintMode = data.regions || data.vpcs || data.zones || data.subnets || data.clusters || null;
if(paintNode) {
    for(var i=0; i<paintMode.length; i++)
        paintGroups(paintMode[i]);
}
于 2013-07-18T15:09:10.623 回答