以下のコードを最適化したいと思います。
- 入力: jsonData は、すべてのアバイア スキルを含む JSON です。
- sitePbx は、特定のサイトの pbx を含む配列です
考慮事項 : コードの行数は、上記のコードに比べて少なくする必要があります
- コードはある意味でジェネリックである必要があります。
将来、新しい 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
ます。
スペースを削除すると、マップの代わりに使用できますが、一般的ではありません。
このコードがパフォーマンスの問題になる可能性は非常に低いと思いますが、コンテナーを検索するのは 1 回だけで、jsonData
要素ごとに 1 回の方がよいはずです。
jsonData
が本当に巨大で、ごくわずかなオプションしか追加されない場合は、何らかのメタプログラミングが合理的である可能性があります (つまり、展開された関数をその場で を使用して生成します) eval
。