JS根據子節(jié)點遞歸獲取所有父節(jié)點的集合

//傳入參數:需要遍歷的對象,需要匹配的id,獲取所有的父級節(jié)點的Id

? ? ? ??function?findIdList(data2,?id,?children?=?'children',?level?=?0)?{

??var?arrRes?=?[];

??let?obj?=?{

??????id:?0,

??????[children]:?data2

??}

??let?rev?=?(data,?id,?level)?=>?{

????if?(!data?||?!data[children]?||?!data[children].length)?{

??????return;

????}

????for?(var?i?=?0;?i?<?data[children].length;?i++)?{

??????let?item?=?data[children][i];

??????if?(item.id?==?id)?{

????????//?將匹配到的結果保存到數組

????????arrRes.unshift({?level,?activeId:?item.id?});

????????//?遞歸它的父級

????????rev(obj,?data.id,?0);

????????break;

??????}?else?if?(item[children]?&&?item[children].length?>?0)?{

????????//如果有子集,則把子集作為參數重新執(zhí)行本方法

????????rev(item,?id,?level?+?1);

??????}

????}

??};

??rev(obj,?id,?level);

??return?arrRes;

}

let?list?=?[

????{id:?1,?children:?[

????????{id:?11,?children:?[{id:?12}]}

????]},

????{id:?2,?children:?[{id:21,?children:?[{id:?31}]}]}

]

let?b?=?findIdList(list,?21)

console.log(b)?//?[?{?level:?0,?activeId:?2?},?{?level:?1,?activeId:?21?}?]


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容