我希望修改我从这个方便的Json-to-HTML-Table脚本获得的输出表,我在这里偶然发现了。有一点(第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
的条件检查。
我现在从json-to-table脚本调用array_keys(parsedJson[0], 'catgoryPath');
。 (是的, catgoryPath 是正确拼写的名称哈哈)。然后我在array_keys
函数中的for循环中设置了一个断点,以便在Firebug中跟进它。
第一次迭代:catgoryName
被添加到tmp_arr
,第二次迭代:catgoryPath
被添加到tmp_arr
...并继续第3次和第4次迭代。我不想添加catgoryPath
。
查看脚本调试器,在第二次迭代中,是否添加catgoryPath
会归结为条件:else if (input[key] == search_value)
行。问题是,根据Firebug,在相应的迭代中,key
和search_value
变量都等于“catgoryPath”。那么,include = false;
应该正确吗?
感谢任何帮助,对内联代码的长度和自由使用道歉。
答案 0 :(得分:1)
如果您使用的是JS>而不是使用json-to-table脚本中的array_keys
函数。 1.8.5您可以使用Object.keys(obj)返回给定对象自己的可枚举属性的数组。
然后将返回的键数组用作表头,在该表头下,由于脚本,表中填充了JSON数据。在创建表之前,我使用了我的表头数组并使用array.splice(index, howMany)而不是delete
(see here)来保留我的数组索引值。