javascript - 在 Javascript 中的嵌套对象中查找分支
问题描述
在过去的两个小时内,我试图为我的问题找到解决方案,其中包括尝试自己、扫描 lodash 文档以及 SO 以获得任何合适的答案,但没有提出任何远程工作或实用的方法。我将非常感谢您的帮助。
我有一个可以是任何深度的对象。
例如
{
"name": "alpha",
"children": [
{
"name": "beta",
"children": [
{
"name": "gamma",
"children": [
{
"name": "delta",
"children": []
}
]
}
]
},
{
"name": "epsilon",
"children": [
{
"name": "zeta",
"children": [
{
"name": "eta",
"children": []
}
]
}
]
}
]
}
我正在寻找一个函数,它将返回这个对象的整个分支,其中有一个匹配的名称(如果可能没有 lodash,但如果真的需要它就可以了)。
给定'gamma'
我希望它返回的输入
{
"name": "alpha",
"children": [
{
"name": "beta",
"children": [
{
"name": "gamma",
"children": [
{
"name": "delta",
"children": []
}
]
}
]
}
]
}
给定一个输入't'
,我希望它返回整个对象,因为它包含在两个分支的孩子的名字中。
解决方案
您可以将此问题分为两部分,首先让我们测试名称是否存在于树中:
function hasStr(item, str) {
return item.name.includes(str) || item.children.some(x => hasStr(x, str));
}
hasStr(item, 'gamma'); // true
您还要求有一个函数返回传递的对象并仅返回过滤后的子项:
function possibleAnswer(item, str) {
return {
name: item.name,
children: item.children.filter(x => hasStr(x, str)),
};
}
possibleAnswer(item, 'gamma'); // will return desired object
推荐阅读
- sql - 将表名和值列表作为参数传递给 psycopg2 查询
- ruby-on-rails - 在 rails 的 devise-jwt 中查找 JWT 令牌的用户
- telegram - 深度链接到电报机器人
- python - 如果使用 python regex 找到特定字符串,则突出显示整行
- python - 为什么在 tensorflow 2 中使用 tf.GradientTape 进行训练与使用 fit API 进行训练有不同的行为?
- spring-kafka - 多个 KafkaListener 类可以监听同一个主题吗?
- excel - 如何通过 VBA 抓取整页源代码 - 单元格限制问题
- javascript - 可以验证网页上的多个表单的 JavaScript 函数
- laravel - 如何在 laravel 中创建 3 个级别的多租户功能
- node.js - busboyConstructor 上不存在 Jest mockImplementation