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;正しい発砲を行う必要がありますか?
インラインコードの長さと自由な使用についてお詫び申し上げます。