在Javascript中的嵌套对象中查找分支
在过去的两个小时里,我试图找到解决问题的方法,包括亲自尝试,扫描lodash文档,寻找合适的答案,但没有找到任何远程工作或实用的方法。我将非常感谢你的帮助 我有一个物体可以是任何深度 e、 g 我正在寻找一个函数,它将返回这个对象的整个分支,其中有一个匹配的名称(如果可能的话,没有lodash,但是如果真的需要它的ok) 如果输入在Javascript中的嵌套对象中查找分支,javascript,object,filter,lodash,Javascript,Object,Filter,Lodash,在过去的两个小时里,我试图找到解决问题的方法,包括亲自尝试,扫描lodash文档,寻找合适的答案,但没有找到任何远程工作或实用的方法。我将非常感谢你的帮助 我有一个物体可以是任何深度 e、 g 我正在寻找一个函数,它将返回这个对象的整个分支,其中有一个匹配的名称(如果可能的话,没有lodash,但是如果真的需要它的ok) 如果输入'gamma',我希望它会返回 { "name": "alpha", "children": [
'gamma'
,我希望它会返回
{
"name": "alpha",
"children": [
{
"name": "beta",
"children": [
{
"name": "gamma",
"children": [
{
"name": "delta",
"children": []
}
]
}
]
}
]
}
给定一个输入
't'
我希望它返回整个对象,因为它包含在两个分支的子对象名称中。这个问题可以通过递归解决,因为深度不知道
getNames = (nameChild, match) => {
if (nameChild.length < 1) return false;
if (nameChild.name.includes(match)) return true;
k = nameChild.children
.filter((child) =>
getNames(child, match))
return (k.length > 0) ? k : false;
}
这就行了 您可以将此问题分为两部分,首先让我们测试名称是否出现在树中:
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
为什么“a”输入应该返回整个对象?由于对象的名称中包含“a”,因此“@AkhilM”因为“a”包含在子分支的名称中。所以是的。因此,当输入“z”时,它应该只返回出现“zeta”的分支
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