如何使用javascript在递归对象中找到基于一键的树级别
how to find tree level based on one key in recursive object using javascript
我正试图在中的递归对象中找到一个特定键的树级别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')));
相关文章:
- SlideJS隐藏仅适用于一次
- jQuery表单验证只适用于一次发布
- 为什么 .data() 适用于一组元素,但不适用于单个元素
- Javascript Switch 语句中的默认值仅适用于一种情况,但不适用于两种情况
- 字符编码适用于一页,但不适用于另一页
- 制作一个不带eval()的动态变量,该变量对应于一个数组
- 生成类似于一种颜色的可微分颜色
- Trello API访问仅适用于一个人
- Three.js Fog仅适用于一种特定情况
- Javascript:通过另一个数组中列出的键提取一个数组
- 防止以前在mousedown上定义的事件只用于右键单击
- 将一个数组赋值给另一个数组的键
- 检查一个类是否存在于一组选定的元素中
- 区分鼠标左键和右键的不同方式,要用哪一种
- 我需要一种方法来执行一个特定的功能,当我按下前进键或后退键在javascript
- MDL模态按钮适用于一张卡,但不适用于其他卡
- 使用下划线获取所有键和每个键的惟一值列表
- 如何设置“全选”功能只适用于一页
- selectedIndex在firefox中不起作用,它来自于一个数组元素
- 你如何解析一个数组删除键,只返回值与javascript