通过平面数组进行递归搜索

时间:2019-06-04 01:57:29

标签: javascript jquery

我有一个平坦的关联数组,可以对与特定parentID匹配的所有元素进行grep处理。然后,我需要用返回的结果重新运行该函数,以查看是否有任何具有parentID的元素与先前的结果匹配。从本质上讲,我正在努力让所有孩子以及这些孩子中的所有孩子。

在下面的数组中,每个元素都有一个与其对应的父ID。我有一个函数,可以对包含传递给我的父ID的任何元素的数组进行grep复制,这可以正常工作。

  array("id" => "Test", "parent" => "#", "text" => "Title"),
  array("id" => "Test1", "parent" => "Test", "text" => "Title1"),
  array("id" => "Test2", "parent" => "Test", "text" => "Title2"),
  array("id" => "Test3", "parent" => "Test2", "text" => "Title3") ,
  array("id" => "Test4", "parent" => "Test1", "text" => "Title4") ,
  array("id" => "Test5", "parent" => "Test1", "text" => "Title5") 


function getChildren(id){
  var children = jQuery.grep(orig, function( n, i ) {
   return ( n.parent === id );
  });
return children;

// var children = jQuery.grep(orig, function( n, i ) {
//     return ( n.parent === id );
//   });
//   $.each(children,function(a,b){
// 
//       getChildren(children[0]['id']);
//   });
}

首次运行该函数后,它将返回包含该父ID的子代的列表。我现在需要将所有这些孩子推回循环中并让他们的孩子。理想情况下,一旦循环完成,我将拥有一个包含所有子代的单个阵列。当前,该函数的第一部分有效,但是我注释掉的区域(我尝试将结果传递回该区域)不起作用。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您可以像这样fiddle

function getChildren(id){
  let result = [];
  $.each(orig, function(i, d) {
     if (d.parent === id) {
            result.push(d);
        result.push(...getChildren(d.id));
     }
  });
  return result;
}

console.log(getChildren('Test'));
相关问题