我有一个平坦的关联数组,可以对与特定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的子代的列表。我现在需要将所有这些孩子推回循环中并让他们的孩子。理想情况下,一旦循环完成,我将拥有一个包含所有子代的单个阵列。当前,该函数的第一部分有效,但是我注释掉的区域(我尝试将结果传递回该区域)不起作用。任何帮助将不胜感激。
答案 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'));