-5

我希望优化下面的代码。

  • 输入:jsonData 是一个包含所有 avaya 技能的 JSON
  • sitePbx 是一个包含特定站点的 pbxs 的数组

注意事项:与上面的代码相比,代码行数应该更少

  • 代码应该是通用的,以便在

    将来如果添加新的 PBX,则不再需要 if-else

  • 比较次数应该更少,以便优化性能

4

1 回答 1

0
var pbxNames = {"Elk Grove": "ElkGrove"};
var container = $('#' + attributeTableId + portletId);

$.each(jsonData, function(i, json) {
    var addPbx = true;
    $.each(sitePbx, function(j, pbx) {
        if (json[pbxNames[pbx] || pbx] == 'null') {
            addPbx = false;
        }
    });
    if (addPbx) {
        container.append('<option value="' +
                         json.id +
                         '">' +
                         json.name +
                         '</option>');
    }
});

这个想法是:不是单独检查Pbxs ,而是遍历元素sitePbx并检查关联的标签是否存在于 JSON 节点中。

地图的pbxNames存在是因为Elk Grove(在其他情况下,标签与名称相同)。添加新的 PBX 应该是自动的,除非名称需要翻译为pbxNames.

可以使用删除空格来代替地图,但它也不太通用。

我高度怀疑这段代码可能会成为性能问题,但只查找一次容器而不是每个jsonData元素一次应该更好。

如果jsonData真的非常大并且只添加很少的选项,那么一些元编程可能是合理的(即使用 动态生成展开的函数eval)。

于 2013-10-26T06:25:36.477 回答