jQuery - How to recursively loop over an object's nested properties?

后端 未结 5 1259
执笔经年
执笔经年 2020-12-16 20:46

Is there are a way to recursively loop over all the nested properties of a JS/jQuery object?

For example, given this object

var x = {
    \'name\': \         


        
相关标签:
5条回答
  • 2020-12-16 21:01
    var x = {
        'name': 'a',
        'level': 1,
        'children': [{
            'name': 'b',
            'level' : 2,
            'children' : [{
                'name': 'c',
                'level' : 3,
                'children' : [{
                }]
            }]
        }, {
            'name': 'b2',
            'level' : 2,
            'children' : [{
                'name': 'c2',
                'level' : 3,
                'children' : [{
                }]
            }]
        }]
    }
    var step = x;
    do {
        if (step instanceof Array){
            for (i=0; i < step.length; i++) {
                callback(step[i]);
            }
        }
        else {
            callback(step);
        }
        step = step.children != undefined ? step.children : null;
    } while (step);
    
    function callback (element) {
        console.log(element);
    }
    

    as long as the structure does not change, you can go down like this.

    0 讨论(0)
  • 2020-12-16 21:03

    A recursive approach seems best, something like this:

    function recursiveIteration(object) {
        for (var property in object) {
            if (object.hasOwnProperty(property)) {
                if (typeof object[property] == "object"){
                    recursiveIteration(object[property]);
                }else{
                    //found a property which is not an object, check for your conditions here
                }
            }
        }
    }
    

    This is a working fiddle

    0 讨论(0)
  • 2020-12-16 21:05
    function iterate(obj){
        for(var key in obj)
        {
            if(typeof(obj["key"]) == "object"){
                iterate(obj["key"]);
            }
            else{
                console.log(key + ": " + obj["key"];
            }
        }
    
    }
    
    0 讨论(0)
  • 2020-12-16 21:09

    Your JSON is not well formatted but you can "visit" each item as below:

    <html>
    <head>
        <title>test</title>
        <script type="text/javascript">
            var x = {
                    "name": "a",
                    "level": 1,
                    "children": [
                        {
                            "name": "b",
                            "level": 2,
                            "children": [
                                {
                                    "name": "c",
                                    "level": 3,
                                    "children": [
                                        {
                                            "sss": 23
                                        }
                                    ]
                                }
                            ]
                        }
                    ]
                };
    
             function visit(obj){
                for(var prop in obj){
                    if(typeof(obj[prop]) == 'object'){
                        if(Object.prototype.toString.call(obj[prop]) == '[object Array]'){
                            for(var i = 0; i < obj[prop].length; i++){
                                document.write("<br />the element " + prop + " (array) was visited");
                                visit(obj[prop][i]);                                
                            }
                        }else{
                            document.write("<br />the element " + prop + " (object) was visited");
                            visit(obj[prop]);
                        }
                    }else{
                        document.write("<br />the element " + prop + " = " + obj[prop] + " was visited");
                    }
                }
            }
    
            visit(x);
    
        </script>
    </head>
    <body>
    
    </body>
    

    0 讨论(0)
  • 2020-12-16 21:10

    I was originally looking for a way to search a javascript object recursively and I found this post very helpful, in particular Jeroen Moons's answer. I have tweaked it to provide a return object. Input is object to search and a {key:value} object (needle).

    function searchObject(object, keyvalue){
        var found = false;
        for (var property in object){
            if (object.hasOwnProperty(property)){
                if (typeof object[property] == 'object'){
                    found = searchObject(object[property], keyvalue);
                    if (found)
                        return found;
                }else{
                    key = Object.keys(keyvalue)[0];
                    if (property == key && object[key] == keyvalue[key]){
                        console.log('searchObject ' + keyvalue[key] + ' found');
                        return object;
                    }
                }
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题