脚本调试器确认JSON键和字符串之间的预期条件检查,但是我得到了一个不希望的结果

Script debugger confirms intended conditional check between JSON key and string, however I am getting an undesired result?

本文关键字:希望 结果 一个 JSON 确认 调试器 字符串 之间 检查 脚本 条件      更新时间:2023-09-26

我希望修改我从这个方便的Json-to-HTML-Table脚本中获得的输出表,我在SO上偶然发现了这个脚本。在 JSON -to-table.js传递JSON对象并生成用作表头的数组键的地方(第86行)。可选地,此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到表脚本调用array_keys(parsedJson[0], 'catgoryPath');。(是的,catgoryPath是正确拼写的名称哈哈)。然后,我在array_keys函数中的for循环中设置了一个断点,以便在Firebug中跟踪它。

第一次迭代:catgoryName被添加到tmp_arr,第二次迭代:catgoryPath被添加到tmp_arr…并继续进行第三和第四次迭代。我不希望添加catgoryPath

查看脚本调试器,在第二次迭代中,是否添加catgoryPath归结为条件:else if (input[key] == search_value)行。问题是,根据Firebug,在各自的迭代中,keysearch_value变量都等于"catgoryPath"。因此,include = false;应该开火正确吗?

感谢任何帮助,为内联代码的长度和自由使用道歉。

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

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