简体   繁体   English

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

[英]How to determine if JSON object has child items

I have a menu that is built in Angular via some JSON, this menu goes 3 levels deep max. 我有一个通过一些JSON在Angular中构建的菜单,该菜单最大深度为3级。 Some of the menu items have no children while others go to a second or third level. 一些菜单项没有子级,而其他菜单项进入第二或第三级。 I am trying figure out a way to determine if a selected subcategory has any child elements and if it does then I need to hide a button. 我正在尝试找出一种方法来确定选定的子类别是否具有任何子元素,如果有,则需要隐藏一个按钮。

Every time a subcategory is selected like "Digital Art" that value is captured in $scope.selectedSubMarket; 每次选择一个子类别(如“数字艺术”),该值就会在$ scope.selectedSubMarket;中捕获。

How can I check within $scope.art to see if the object with cat: Digital Art has any child objects? 如何在$ scope.art中检查带有cat:Digital Art的对象是否有子对象? Farther down in the JSON you will see a subcategory like 'Comics' that has no 2 level, I need a way to check this and am having no luck.... 在JSON的更下方,您会看到像“漫画”这样的子类别,它没有2级,我需要一种方法来检查它并且没有运气。

在此处输入图片说明

Here is a sample of the JSON that builds the menu: 这是构建菜单的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"},

    ]

If I get you right 如果我说对了

var element = $scope.art.filter(function (el) {return el["cat"] === "Digital Art";})[0];
if (element.second && element.second.length) {
    // Do something
};

For sub elements, use element from previous code: 对于子元素,请使用先前代码中的element

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM