Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中的嵌套对象中查找分支_Javascript_Object_Filter_Lodash - Fatal编程技术网

在Javascript中的嵌套对象中查找分支

在Javascript中的嵌套对象中查找分支,javascript,object,filter,lodash,Javascript,Object,Filter,Lodash,在过去的两个小时里,我试图找到解决问题的方法,包括亲自尝试,扫描lodash文档,寻找合适的答案,但没有找到任何远程工作或实用的方法。我将非常感谢你的帮助 我有一个物体可以是任何深度 e、 g 我正在寻找一个函数,它将返回这个对象的整个分支,其中有一个匹配的名称(如果可能的话,没有lodash,但是如果真的需要它的ok) 如果输入'gamma',我希望它会返回 { "name": "alpha", "children": [

在过去的两个小时里,我试图找到解决问题的方法,包括亲自尝试,扫描lodash文档,寻找合适的答案,但没有找到任何远程工作或实用的方法。我将非常感谢你的帮助

我有一个物体可以是任何深度

e、 g

我正在寻找一个函数,它将返回这个对象的整个分支,其中有一个匹配的名称(如果可能的话,没有lodash,但是如果真的需要它的ok)

如果输入
'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