如何使用javascript在递归对象中找到基于一键的树级别

how to find tree level based on one key in recursive object using javascript

本文关键字:一键 于一键 javascript 何使用 递归 对象      更新时间:2023-09-26

我正试图在中的递归对象中找到一个特定键的树级别JavaScript。我需要下面对象中每个title键的值,也可以像树一样找到当前对象的级别,但对象递归到无穷大。

如何获取指定密钥的树级别?

预期输出

这是我的目标

var object = { 
    "code": 200, 
    "data": { 
        "id": "614b4da4-2910-42c5-8afe-c12521cb0b52", 
        "title": "Android Quick Start Guide", 
        "subTitles": [ 
            { 
                "id": "4dc22d3a-6e10-4938-b538-f86e56afe053",
                "title": "Welcome to Android", 
                "subTitles": [ 
                    { 
                        "id": "4dc22d3a-6e10-4938-b538-f86e56afe053",
                        "title": "Welcome to Android",
                        "subTitles": [] 
                    }, 
                    { 
                        "id": "4dc22d3a-6e10-4938-b538-f86e56afe053",
                        "title": "Welcome to Android", 
                        "subTitles": [] 
                    } 
                ] 
            } 
        ] 
    }, 
    "message": "created" 
};

递归将有助于Array#reduce()和适当的起始值,如新的标记元素ul

function getValues(ul, a) {
    var li = document.createElement('li');
    li.innerHTML = a.description;
    Array.isArray(a.subTitles) && li.appendChild(a.subTitles.reduce(getValues, document.createElement('ul')));
    ul.appendChild(li);
    return ul;
}
var object = { "code": 200, "data": { "path": "614b4da4-2910-42c5-8afe-c12521cb0b52", "number": 100, "description": "Android Quick Start Guide", "createdTime": 1460095475590, "id": "614b4da4-2910-42c5-8afe-c12521cb0b52", "title": "Android Quick Start Guide", "isRootTitle": true, "subTitles": [{ "path": "614b4da4-2910-42c5-8afe-c12521cb0b52", "number": 100, "description": "description about the manual 1", "createdTime": 1460095516423, "id": "4dc22d3a-6e10-4938-b538-f86e56afe053", "title": "Welcome to Android", "isRootTitle": false, "subTitles": [{ "path": "4dc22d3a-6e10-4938-b538-f86e56afe053", "number": 100, "description": "About Android Marshmallow", "createdTime": 1460095604835, "id": "c431983e-e4e2-4369-8322-4358c2e6db6e", "title": "About Android Marshmallow", "isRootTitle": false, "subTitles": [] }, { "path": "4dc22d3a-6e10-4938-b538-f86e56afe053", "number": 200, "description": "description about the manual 1.2", "createdTime": 1460095672614, "id": "63743f5f-6451-4792-96c6-936b7e8fe820", "title": "What's new in 6.0", "isRootTitle": false, "subTitles": [{ "path": "4dc22d3a-6e10-4938-b538-f86e56afe053", "number": 100, "description": "About Android Marshmallow", "createdTime": 1460095604835, "id": "c431983e-e4e2-4369-8322-4358c2e6db6e", "title": "Get Started", "isRootTitle": false, "subTitles": [] }] }] }, { "path": "614b4da4-2910-42c5-8afe-c12521cb0b52", "number": 200, "description": "description about the manual 2", "createdTime": 1460095526821, "id": "42c669ca-d1cb-494c-8c7d-cbef767de919", "title": "Essentials", "isRootTitle": false, "subTitles": [{ "path": "4dc22d3a-6e10-4938-b538-f86e56afe053", "number": 100, "description": "About Android Marshmallow", "createdTime": 1460095604835, "id": "c431983e-e4e2-4369-8322-4358c2e6db6e", "title": "Google Now", "isRootTitle": false, "subTitles": [] }, { "path": "4dc22d3a-6e10-4938-b538-f86e56afe053", "number": 200, "description": "About Android Marshmallow", "createdTime": 1460095604835, "id": "c431983e-e4e2-4369-8322-4358c2e6db6e", "title": "Tell Google what to do", "isRootTitle": false, "subTitles": [] }] }, { "path": "614b4da4-2910-42c5-8afe-c12521cb0b52", "number": 300, "description": "description about the manual 3", "createdTime": 1460095536268, "id": "1018401c-211a-4cdc-9370-d59d75325da5", "title": "Gesture Typing", "isRootTitle": false, "subTitles": [{ "path": "4dc22d3a-6e10-4938-b538-f86e56afe053", "number": 100, "description": "About Android Marshmallow", "createdTime": 1460095604835, "id": "c431983e-e4e2-4369-8322-4358c2e6db6e", "title": "Enter & edit text", "isRootTitle": false, "subTitles": [] }, { "path": "4dc22d3a-6e10-4938-b538-f86e56afe053", "number": 200, "description": "About Android Marshmallow", "createdTime": 1460095604835, "id": "c431983e-e4e2-4369-8322-4358c2e6db6e", "title": "Type by speaking", "isRootTitle": false, "subTitles": [] }] }, { "path": "614b4da4-2910-42c5-8afe-c12521cb0b52", "number": 400, "description": "description about the manual 4", "createdTime": 1460095549864, "id": "e58de49c-c261-46cc-aef4-4d75c3fdcc21", "title": "Try some apps", "isRootTitle": false, "subTitles": [{ "path": "4dc22d3a-6e10-4938-b538-f86e56afe053", "number": 100, "description": "About Android Marshmallow", "createdTime": 1460095604835, "id": "c431983e-e4e2-4369-8322-4358c2e6db6e", "title": "Enter & edit text", "isRootTitle": false, "subTitles": [] }, { "path": "4dc22d3a-6e10-4938-b538-f86e56afe053", "number": 200, "description": "About Android Marshmallow", "createdTime": 1460095604835, "id": "c431983e-e4e2-4369-8322-4358c2e6db6e", "title": "Type by speaking", "isRootTitle": false, "subTitles": [] }] }] }, "message": "created" };
document.body.appendChild([object.data].reduce(getValues, document.createElement('ul')));