一個多維數(shù)組,如何簡潔循環(huán)里面children,成功id后,要獲取遞歸后每次上一級包含自身一級的name值

要在一個多維數(shù)組中循環(huán)遍歷 children,并在找到具有特定 id 的節(jié)點(diǎn)后,獲取從根節(jié)點(diǎn)到該節(jié)點(diǎn)路徑上每一級(包括自身)的 name 值,你可以使用遞歸函數(shù),并在遞歸的過程中收集這些 name 值。

const data = [  
  {  
    id: 1,  
    name: 'Root',  
    children: [  
      {  
        id: 2,  
        name: 'Level 1 - A',  
        children: [  
          {  
            id: 3,  
            name: 'Level 2 - A1',  
            // 其他屬性...  
            children: [  
              // 更深層次的子節(jié)點(diǎn)...  
            ]  
          },  
          // 其他子節(jié)點(diǎn)...  
        ],  
      },  
      {  
        id: 4,  
        name: 'Level 1 - B',  
        // 無子節(jié)點(diǎn)或更多子節(jié)點(diǎn)...  
      },  
      // 其他子節(jié)點(diǎn)...  
    ],  
  },  
  // 其他根節(jié)點(diǎn)...  
];  
  
function findPathNamesById(nodes, targetId, pathNames = []) {  
  for (let node of nodes) {  
    // 將當(dāng)前節(jié)點(diǎn)的 name 添加到路徑中  
    const newPath = [...pathNames, node.name];  
      
    if (node.id === targetId) {  
      return newPath; // 找到目標(biāo)節(jié)點(diǎn),返回完整的路徑名稱數(shù)組  
    }  
      
    if (node.children && node.children.length > 0) {  
      // 遞歸查找子節(jié)點(diǎn)  
      const result = findPathNamesById(node.children, targetId, newPath);  
      if (result) {  
        return result; // 在子節(jié)點(diǎn)中找到目標(biāo)節(jié)點(diǎn),返回完整的路徑名稱數(shù)組  
      }  
    }  
  }  
    
  return null; // 沒有找到目標(biāo)節(jié)點(diǎn),返回 null  
}  
  
// 使用示例  
const targetId = 3;  
const pathNames = findPathNamesById(data, targetId);  
if (pathNames) {  
  console.log('從根到目標(biāo)節(jié)點(diǎn)的名稱路徑:', pathNames.join(' -> '));  
  // 輸出: 從根到目標(biāo)節(jié)點(diǎn)的名稱路徑: Root -> Level 1 - A -> Level 2 - A1  
} else {  
  console.log('未找到節(jié)點(diǎn)');  
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容