javascript - 从数组子元素的父元素创建一个新数组
问题描述
我有以下数组
{
"id": "111",
"name": "1111",
"children": [
{
"id": "22222",
"name": "2222",
"children": [
{
"id": "AAAA",
"name": "AAAA",
"children": [
{
"id": "DDD",
"name": "DDD"
},
{
"id": "EEE",
"name": "EEE"
}
]
},
{
"id": "BBBB",
"name": "BBB",
"children": [
{
"id": "FFF",
"name": "FFF"
},
{
"id": "GGG",
"name": "GGG",
"children": [
{
"id": "7777",
"name": "7777"
},
{
"id": "8888",
"name": "8888"
}
]
}
]
}
]
}
]
}
我想通过其 ID 创建一个包含孩子父母的数组。
因此,例如,如果我想获得 ID 为“FFF”的孩子的路径,那么数组将如下所示:
["1111", "2222", "BBB", "FFF"]
我怎么能这样做呢?
解决方案
您可以采用迭代和递归的方法。
function getItems({ children, ...object }, key, value) {
var temp;
if (object[key] === value) return [object];
if (children) children.some(o => temp = getItems(o, key, value));
return temp && [object, ...temp];
}
var data = { id: "111", name: "1111", children: [{ id: "22222", name: "2222", children: [{ id: "AAAA", name: "AAAA", children: [{ id: "DDD", name: "DDD" }, { id: "EEE", name: "EEE" }] }, { id: "BBBB", name: "BBB", children: [{ id: "FFF", name: "FFF" }, { id: "GGG", name: "GGG", children: [{ id: "7777", name: "7777" }, { id: "8888", name: "8888" }] }] }] }] };
console.log(getItems(data, 'id', 'FFF'));
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- css - 为什么之前的内容不包含在按钮中。我总是有这个问题设计按钮
- face-recognition - 如何使用 amazon-rekognition 从文件夹中验证人脸
- python - 在python中将列表转换为数据框
- eclipse - 了解 STS:Spring Boot 应用程序在 STS 中运行良好,但是当使用 gradle 构建 jar 时,构建失败
- git-stash - 如何在 Visual Studio 2022 中存储?
- python - Python:理解
- wordpress - 如何使 woocommerce 面包屑的最后一项可点击?
- python - 使用 Apache Airflow 在 Python 中访问变量
- azure - 使用 AzureFile 创建的 pvc 的备份和还原
- javascript - 使用 selenium 抓取数据,提供启用 Javascript 消息