我希望优化下面的代码。
- 输入:jsonData 是一个包含所有 avaya 技能的 JSON
- sitePbx 是一个包含特定站点的 pbxs 的数组
注意事项:与上面的代码相比,代码行数应该更少
- 代码应该是通用的,以便在
将来如果添加新的 PBX,则不再需要 if-else
- 比较次数应该更少,以便优化性能
我希望优化下面的代码。
注意事项:与上面的代码相比,代码行数应该更少
将来如果添加新的 PBX,则不再需要 if-else
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>');
}
});
这个想法是:不是单独检查Pbx
s ,而是遍历元素sitePbx
并检查关联的标签是否存在于 JSON 节点中。
地图的pbxNames
存在是因为Elk Grove
(在其他情况下,标签与名称相同)。添加新的 PBX 应该是自动的,除非名称需要翻译为pbxNames
.
可以使用删除空格来代替地图,但它也不太通用。
我高度怀疑这段代码可能会成为性能问题,但只查找一次容器而不是每个jsonData
元素一次应该更好。
如果jsonData
真的非常大并且只添加很少的选项,那么一些元编程可能是合理的(即使用 动态生成展开的函数eval
)。