Javascript 如何确定JSON对象是否有子项

Javascript 如何确定JSON对象是否有子项,javascript,json,angularjs,Javascript,Json,Angularjs,我有一个菜单,通过一些JSON内置在Angular中,这个菜单最多有3层。一些菜单项没有子菜单项,而另一些则进入第二层或第三层。我试图找出一种方法来确定选定的子类别是否有任何子元素,如果有,那么我需要隐藏一个按钮 每次选择像“数字艺术”这样的子类别时,价值都会被捕获到$scope.selectedSubMarket 如何在$scope.art内检查带有cat:Digital art的对象是否有子对象?在JSON的更深处,你会看到像“漫画”这样没有2级的子类别,我需要一种方法来检查这一点,我没有运

我有一个菜单,通过一些JSON内置在Angular中,这个菜单最多有3层。一些菜单项没有子菜单项,而另一些则进入第二层或第三层。我试图找出一种方法来确定选定的子类别是否有任何子元素,如果有,那么我需要隐藏一个按钮

每次选择像“数字艺术”这样的子类别时,价值都会被捕获到$scope.selectedSubMarket

如何在$scope.art内检查带有cat:Digital art的对象是否有子对象?在JSON的更深处,你会看到像“漫画”这样没有2级的子类别,我需要一种方法来检查这一点,我没有运气

以下是构建菜单的JSON示例:

       $scope.art = [
        {"cat": "Digital Art", "second": [
            {"sub": "3 Dimensional Art", "third": [
                {"desc": "Abstract"},
                {"desc": "Characters"},
                {"desc": "Objects"},
                {"desc": "Scenes"},
                {"desc": "Vehicles"},

            ]},
            {"sub": "Animation", "third": [
                {"desc": "Abstract"},
                {"desc": "Characters"},
                {"desc": "Animals"},
                {"desc": "Fantasy"},
                {"desc": "Graffiti"},
                {"desc": "Illustrations"},
                {"desc": "Landscapes & Scenery"},
                {"desc": "Macabre & Horror"},
                {"desc": "People"},
                {"desc": "Sci-fi"},
                {"desc": "Space Art"},
                {"desc": "Political"},
                {"desc": "Pop Art"},
                {"desc": "Psychedelic"},
                {"desc": "Still Life"},
                {"desc": "Surreal"},
            ]},
            {"sub": "Fractal Art", "third": [
                {"desc": "Fractal Animation"},
                {"desc": "Fractal Manipulation"},
                {"desc": "Raw Fractal"},
            ]},
            {"sub": "Photomanipulation", "third": [
                {"desc": "Abstract"},
                {"desc": "Animals & Plants"},
                {"desc": "Conceptual"},
                {"desc": "Dark"},
                {"desc": "Emotional"},
                {"desc": "Humourous"},
                {"desc": "Landscapes & Scenery"},
                {"desc": "Macabre & Horror"},
                {"desc": "People"},
                {"desc": "Sci-fi"},
                {"desc": "Minimalism"},
                {"desc": "Political"},
                {"desc": "Pop Art"},
                {"desc": "Psychedelic"},
                {"desc": "Surreal"},
            ]},
            {"sub": "Pixel Art"},
            {"sub": "Text Art"},
            {"sub": "Typography"},
            {"sub": "Vector", "third": [
                {"desc": "Abstract"},
                {"desc": "Animals & Plants"},
                {"desc": "Conceptual"},
                {"desc": "Dark"},
                {"desc": "Emotional"},
                {"desc": "Humourous"},
                {"desc": "Landscapes & Scenery"},
                {"desc": "Macabre & Horror"},
                {"desc": "People"},
                {"desc": "Sci-fi"},
                {"desc": "Minimalism"},
                {"desc": "Political"},
                {"desc": "Pop Art"},
                {"desc": "Psychedelic"},
                {"desc": "Surreal"},
            ]},
            {"sub": "Vexel", "third": [
                {"desc": "Abstract"},
                {"desc": "Animals & Plants"},
                {"desc": "Conceptual"},
                {"desc": "Dark"},
                {"desc": "Emotional"},
                {"desc": "Humourous"},
                {"desc": "Landscapes & Scenery"},
                {"desc": "Macabre & Horror"},
                {"desc": "People"},
                {"desc": "Sci-fi"},
                {"desc": "Minimalism"},
                {"desc": "Political"},
                {"desc": "Pop Art"},
                {"desc": "Psychedelic"},
                {"desc": "Surreal"},
            ]},


        ]},
        {"cat": "Traditional Art", "second": [
            {"sub": "Assemblage"},
            {"sub": "Body Art", "third": [
                {"desc": "Body Modification"},
                {"desc": "Cosmetic Application"},
                {"desc": "Tattoos"},
                {"desc": "Scenes"},
                {"desc": "Vehicles"},
            ]},
            {"sub": "Collage"},
            {"sub": "Drawings", "third": [
                {"desc": "Abstract"},
                {"desc": "Technical Drawing"},
                {"desc": "Animals"},
                {"desc": "Fantasy"},
                {"desc": "Portrait & Figures"},
                {"desc": "Illustrations"},
                {"desc": "Landscapes & Scenery"},
                {"desc": "Macabre & Horror"},
                {"desc": "People"},
                {"desc": "Sci-Fi"},
                {"desc": "Space Art"},
                {"desc": "Political"},
                {"desc": "Pop Art"},
                {"desc": "Psychedelic"},
                {"desc": "Still Life"},
                {"desc": "Surreal"},

            ]},
            {"sub": "Installation Art"},
            {"sub": "Scratchboard"},
            {"sub": "Paintings", "third": [
                {"desc": "Abstract"},
                {"desc": "Surreal"},
                {"desc": "Animals"},
                {"desc": "Fantasy"},
                {"desc": "Portrait & Figures"},
                {"desc": "Illustrations"},
                {"desc": "Landscapes & Scenery"},
                {"desc": "Macabre & Horror"},
                {"desc": "People"},
                {"desc": "Sci-Fi"},
                {"desc": "Space Art"},
                {"desc": "Political"},
                {"desc": "Pop Art"},
                {"desc": "Psychedelic"},
                {"desc": "Still Life"},
                {"desc": "Surreal"},
            ]},
            {"sub": "Printing", "third": [
                {"desc": "Collagraph"},
                {"desc": "Dry Point"},
                {"desc": "Etching"},
                {"desc": "Lino"},
                {"desc": "Lithograph"},
                {"desc": "Monotype"},
                {"desc": "Silk Screen"},
                {"desc": "Wood Block"},
            ]},
            {"sub": "Street Art", "third": [
                {"desc": "Freehand Graffiti"},
                {"desc": "Installations"},
                {"desc": "Sketch Design"},
                {"desc": "Stencils"},
                {"desc": "Stickers"},
                {"desc": "Wheatpasting"},
            ]},
            {"sub": "Sculpture", "third": [
                {"desc": "Abstract"},
                {"desc": "Busts(People)"},
                {"desc": "Fantasy"},
                {"desc": "Figurative"},
                {"desc": "Horror"},
                {"desc": "Lego"},
                {"desc": "Models"},
                {"desc": "Surreal"},
            ]},

        ]},
        {"cat": "Literature"},
        {"cat": "Artisan Craft"},
        {"cat": "Cartoons"},
        {"cat": "Comics"},
        {"cat": "Animation"},
        {"cat": "Manga & Anime"},
        {"cat": "Scraps"},
        {"cat": "Anthro"},
        {"cat": "Fan Art"},

    ]
如果我没弄错的话

var element = $scope.art.filter(function (el) {return el["cat"] === "Digital Art";})[0];
if (element.second && element.second.length) {
    // Do something
};
对于子元素,使用上一代码中的
元素

var subElement = element["second"].filter(function (el) {return el["sub"] === "Animation";})[0];
if (subElement.third && subElement.third.length) {
    // Do something
};

我想你会更幸运地坚持一个名字,比如
items
,而不是
second
third
。这种模式的一个很好的例子是-。你的递归函数会知道深度。这真的很好,但是当我选择一个没有子级别的子市场,比如漫画,我会得到可怕的“TypeError:Cannotread propoery'length'of undefined”。try-catch是否有助于陷阱,因为我正在寻找的是那些没有子元素的元素?我是否也能够使用它来查找第三级的“第三级”?var元素=$scope.art.filter(函数(el){return el.sub===$rootScope.classification;})[0];如果(element.third&&element.third.length){//Hide console.log('Hide');}或者{//Show console.log('Show');}以上我无法工作,现在尝试检查第二层(子层)是否他有孩子。我想我把阵列搞乱了depth@xXPhenom22Xx
$scope.art.filter
在根数组中查找元素。使用
$scope.art[0].second.filter…
(例如,对于第一个元素)或类似的内容。查看
Array.prototype.filter
的工作原理: