0

我正在寻找修改我从这个方便的 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;火应该正确吗?

任何帮助表示赞赏,对内联代码的长度和自由使用表示歉意。

4

1 回答 1

1

array_keys如果您使用的是 JS > 1.8.5,则可以使用Object.keys(obj)返回给定对象自己的可枚举属性的数组,而不是使用 json-to-table 脚本中的函数。

然后,返回的键数组用作表头,由于脚本,表在表头下填充了 JSON 数据。在创建表之前,我使用了我的表头数组并使用array.splice(index, howMany)而不是delete参见此处)来保存我的数组索引值。

于 2013-04-02T21:30:48.923 回答