我正在寻找修改我从这个方便的 Json-to-HTML-Table脚本中获得的输出表,我在这里偶然发现了 SO。有一点(第 86 行),json-to-table.js传递一个 JSON 对象并生成用作表头的数组键。可选地,此array_key
函数只能为search_value
传递的指定参数生成一个键。但是,我 [尝试] 对其进行修改,以便返回所有不匹配的数组键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
,第二次迭代:catgoryPath
被添加到tmp_arr
...并继续进行第 3 次和第 4 次迭代。我不想catgoryPath
添加。
查看脚本调试器,在第二次迭代中,是否catgoryPath
添加归结为条件:else if (input[key] == search_value)
行。问题是,根据 Firebug ,在相应的迭代中,变量key
和变量都等于“catgoryPath”。search_value
那么,include = false;
火应该正确吗?
任何帮助表示赞赏,对内联代码的长度和自由使用表示歉意。