SO で見つけたこの便利なJson-to-HTML-Tableスクリプトから取得した出力テーブルを変更しようとしています。json-to-table.jsが JSON オブジェクトを渡し、テーブル ヘッダーとして使用される配列キーを生成するポイント (86 行目) があります。オプションで、このarray_key
関数は、search_value
渡された指定されたパラメーターに対して 1 つのキーのみを生成できます。ただし、一致しないすべての配列キーsearch_value
が返されるように、それを変更しようと[試みました]。変更後の関数は次のとおりです。
function array_keys(input, search_value, argStrict)
{
var search = typeof search_value !== 'undefined', tmp_arr = [], strict = !!argStrict, include = '', key = '';
if (input && typeof input === 'object' && input.change_key_case) { // Duck-type check for our own array()-created PHPJS_Array
return input.keys(search_value, argStrict);
}
for (key in input)
{
if (input.hasOwnProperty(key))
{
include = false;
if (search)
{
if (strict && input[key] == search_value)
include = false;
else if (input[key] == search_value)
include = false;
else
include = true;
}
if (include)
tmp_arr[tmp_arr.length] = key;
}
}
return tmp_arr;
}
これを行った理由は、生成されたテーブルに JSON オブジェクトの特定の列を含めないようにするためです。
{
"examItemCategories": [
{
"catgoryName": "01-Normal processes",
"catgoryPath": "General Area\\01-Normal processes",
"numberOfItems": 2,
"percentage": "6.06"
}
]
}
渡された元の JSON obj を変更できないため、作成後にテーブルを変更するか (たとえば、列を削除するか)、または作成中に変更するかどうかを決定していました。関数を見た後array_keys
、 の条件チェックを簡単に反転できると感じましたsearch_value
。
array_keys(parsedJson[0], 'catgoryPath');
json-to-table スクリプトから呼び出すようになりました。(はい、catgoryPathは正しいスペルの名前です (笑))。次に、関数内の for ループにブレーク ポイントを設定しarray_keys
て、Firebug でそれを追跡します。
最初の反復:catgoryName
が に追加されtmp_arr
、2 番目の反復:catgoryPath
がtmp_arr
... に追加され、3 回目と 4 回目の反復が続きます。catgoryPath
追加したくない。
スクリプト デバッガーを見ると、2 回目の反復で、追加されるかどうかcatgoryPath
は conditional:else if (input[key] == search_value)
行に帰着します。問題は、Firebug によると、それぞれの反復でkey
とsearch_value
変数の両方が「catgoryPath」に等しいということです。したがって、include = false;
正しい発砲を行う必要がありますか?
インラインコードの長さと自由な使用についてお詫び申し上げます。