Jquery 嵌套json和递归$.Each()

Jquery 嵌套json和递归$.Each(),jquery,json,recursion,nested,each,Jquery,Json,Recursion,Nested,Each,我有一个嵌套的JSON,如下所示: [{ "1": { "name": "Mobile" }, "5": { "name": "Savings", "childs": { "27": { "name": "Children" } } }, "6": { "name": "Pro Expenses" }, "7": { "name": "Salary", "childs": {

我有一个嵌套的JSON,如下所示:

[{
"1": {
    "name": "Mobile"
},
"5": {
    "name": "Savings",
    "childs": {
        "27": {
            "name": "Children"
        }
    }
},
"6": {
    "name": "Pro Expenses"
},
"7": {
    "name": "Salary",
    "childs": {
        "143": {
            "name": "Salary Savings"
        }
    }
},
"8": {
    "name": "Food",
    "childs": {
        "13": {
            "name": "Lunch Food",
            "childs": {
                "53": {
                    "name": "Coffee"
                }
            }
        },
        "91": {
            "name": "Canteen"
        },
        "93": {
            "name": "Market"
        }
    }
}]
<SELECT>
<OPTION value="1">Mobile</OPTION>
<OPTGROUP name="Savings">
    <OPTION value="27">Children</OPTION>
</OPTGROUP>
<OPTION value="6">Pro Expenses</OPTION>
<OPTGROUP name="Salary">
    <OPTION value="143">Salary Savings</OPTION>
</OPTGROUP>
<OPTGROUP name="Food">
    <OPTGROUP name="Lunch Food">
        <OPTION value="53">Coffee</OPTION>
    </OPTGROUP>
    <OPTION value="91">Canteen</OPTION>
    <OPTION value="93">Market</OPTION>
</OPTGROUP>
</SELECT>
我想用optgroup和如下选项创建一个嵌套的select:

[{
"1": {
    "name": "Mobile"
},
"5": {
    "name": "Savings",
    "childs": {
        "27": {
            "name": "Children"
        }
    }
},
"6": {
    "name": "Pro Expenses"
},
"7": {
    "name": "Salary",
    "childs": {
        "143": {
            "name": "Salary Savings"
        }
    }
},
"8": {
    "name": "Food",
    "childs": {
        "13": {
            "name": "Lunch Food",
            "childs": {
                "53": {
                    "name": "Coffee"
                }
            }
        },
        "91": {
            "name": "Canteen"
        },
        "93": {
            "name": "Market"
        }
    }
}]
<SELECT>
<OPTION value="1">Mobile</OPTION>
<OPTGROUP name="Savings">
    <OPTION value="27">Children</OPTION>
</OPTGROUP>
<OPTION value="6">Pro Expenses</OPTION>
<OPTGROUP name="Salary">
    <OPTION value="143">Salary Savings</OPTION>
</OPTGROUP>
<OPTGROUP name="Food">
    <OPTGROUP name="Lunch Food">
        <OPTION value="53">Coffee</OPTION>
    </OPTGROUP>
    <OPTION value="91">Canteen</OPTION>
    <OPTION value="93">Market</OPTION>
</OPTGROUP>
</SELECT>
我知道嵌套的OPTGROUP无效。但这不是我想在这里讨论的重点

我下面的Jquery代码不起作用,因为每个Jquery的第三个参数都不受支持

$.getJSON("/?act=get_json_data",{data:'categories'}, function(json) {
    var select = $('#categories');
    $.each(json, function add_optgroup(k, item, parent=select) {
        if (typeof(item.childs) !== 'undefined') {
            var group = $('<optgroup>',{label:item.name});
            $.each(item.childs, add_optgroup(ck, citem, group));
            group.appendTo(parent);
        } else {
            $("<option/>",{value:k,text:item.name})
                    .appendTo(parent);
        }
    });
我尝试了很多解决方案,但是由于.appendTo,我需要父级,并且每个都不允许第三个参数


欢迎任何帮助

使用另一个嵌套函数来弥补所需的3-arg函数调用和内部调用之间的差距:

$.each(item.childs, function(ck, citem) { add_optgroup(ck, citem, group) });
此函数从每个参数中获取键/值参数,并添加第三个参数组,作为封闭范围的一部分,它可以访问该参数组