-5

以下のコードを最適化したいと思います。

  • 入力: jsonData は、すべてのアバイア スキルを含む JSON です。
  • sitePbx は、特定のサイトの pbx を含む配列です

考慮事項 : コードの行数は、上記のコードに比べて少なくする必要があります

  • コードはある意味でジェネリックである必要があります。

    将来、新しい 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ます。

スペースを削除すると、マップの代わりに使用できますが、一般的ではありません。

このコードがパフォーマンスの問題になる可能性は非常に低いと思いますが、コンテナーを検索するのは 1 回だけで、jsonData要素ごとに 1 回の方がよいはずです。

jsonDataが本当に巨大で、ごくわずかなオプションしか追加されない場合は、何らかのメタプログラミングが合理的である可能性があります (つまり、展開された関数をその場で を使用して生成します) eval

于 2013-10-26T06:25:36.477 に答える