javascript - 角度打字稿如何展平嵌套数组以仅查找具有特定条件的对象
问题描述
我有以下数组对象。我想展平数组以仅获取名称包含“Martin”的对象
源数组:
[
{
"id": 302,
"name": "David Martin",
"subordinates": [
{
"id": 265,
"name": "Martin Regan",
},
{
"id": 300,
"name": "William Baker",
},
{
"id": 301,
"name": "Anthony Mazzarino",
"subordinates": [
{
"id": 11245,
"name": "Martin Lozano",
}
]
}
]
},
{
"id": 10441,
"name": "Martin Delage De Luget"
}
]
预期结果:
[
{
"id": 302,
"userGuid": "66d6fd24-0e22-4384-9181-f72c4e81cefd",
"name": "David Martin"
},
{
"id": 265,
"name": "Martin Regan",
},
{
"id": 11245,
"name": "Martin Lozano",
}
]
解决方案
在这些情况下,递归总是一个简单的解决方案:
flatElements = (array, keyword) => {
// Recursive function
const traverse = (subArray, acc = []) => {
subArray.forEach(element => {
const {id, name, subordinates} = element;
// If object with certain condition push it in the resulting acc
if (element.name.contains(keyword)) {
acc.push({id, name});
}
// If subordinates exist, traverse them deeply
if (subordinates) {
traverse(subordinates, acc);
}
});
// Return accumulator
return acc;
}
return traverse(array, []);
}
推荐阅读
- node.js - 通过node.js从mongodb获取数据
- oracle - 如何设置提示?OBIEE12c / Oracle BI
- linux-kernel - UEFI memmap中的属性部分是什么意思?
- api - Twitter API:完成Twitter API申请和邮箱验证后,我接下来应该做什么?
- amazon-web-services - AWS Glue 作业失败并出现错误“错误客户端:应用程序诊断消息:用户应用程序以状态 1 退出”
- django - 我可以将 Django 2.X 版本应用到最新版本吗?
- c# - 如何使用 C# 在 POST 请求中发送 json 请求正文数据
- docker - Cloud Logging 不适用于运行容器的容器优化操作系统
- html - 词组的第一个字母
- c# - 使用 Azure 上的 Application Insights 在 ASP.Net MVC 应用程序上捕获搜索查询字符串