国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

js遞歸遍歷樹形結(jié)構(gòu)數(shù)據(jù),獲取所有數(shù)組id集合

這篇具有很好參考價值的文章主要介紹了js遞歸遍歷樹形結(jié)構(gòu)數(shù)據(jù),獲取所有數(shù)組id集合。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

實現(xiàn)思路

可以使用遞歸遍歷整個樹形數(shù)組,將每個節(jié)點的id加入到一個數(shù)組中,最后返回這個數(shù)組即可。

數(shù)據(jù)準備

let datas = [
  {
    id: "1",
    pId: "0",
    children: [
      {
        id: "1-1",
        pId: "1",
      },
    ],
  },
  {
    id: "2",
    pId: "0",
    children: [
      {
        id: "2-1",
        pId: "1",
        children: [
          {
            id: "2-1-2",
            pId: "2",
          },
        ],
      },
    ],
  },
];

代碼實現(xiàn)

方式一

function getAllIds(tree, result) {
  //遍歷樹  獲取id數(shù)組
  for (const i in tree) {
    result.push(tree[i].id); // 遍歷項目滿足條件后的操作
    if (tree[i].children) {
      //存在子節(jié)點就遞歸
      getAllIds(tree[i].children, result);
    }
  }
  return result;
}

獲取結(jié)果

console.log(getAllIds(datas, []), "getAllIds+++++++++");

方式二

function getAllIds(tree) {
  let result = [];
  if (!Array.isArray(tree)) {
    return result;
  }
  tree.forEach((node) => {
    result.push(node.id);
    if (Array.isArray(node.children)) {
      // result.push(...getAllIds(node.children));
      result = result.concat(getAllIds(node.children));
    }
  });
  return result;
}

獲取結(jié)果

console.log(getAllIds(datas), "getAllIds+++++++++");

方式三

function getAllIds(tree, result) {
  if (!Array.isArray(tree)) return []; // 如果不是一個數(shù)組,則返回
  for (let i = 0; i < tree.length; i++) {
    const node = tree[i];
    result.push(node.id); // 存儲當前節(jié)點的id
    if (Array.isArray(node.children)) {
      // 如果當前節(jié)點有子節(jié)點,則遞歸遍歷子節(jié)點
      getAllIds(node.children, result);
    }
  }
  return result;
}

獲取結(jié)果

console.log(getAllIds(datas, []), "getAllIds+++++++++");

方法總結(jié)

這里的tree是樹形數(shù)組,result是用來保存所有id的數(shù)組。

首先遍歷當前層級的每個節(jié)點,將節(jié)點的id加入到result中。

如果節(jié)點還有子節(jié)點,就遞歸調(diào)用getAllIds函數(shù)獲取子節(jié)點的id并將其合并到result數(shù)組中。

最后返回result數(shù)組。文章來源地址http://www.zghlxwxcb.cn/news/detail-511611.html

到了這里,關(guān)于js遞歸遍歷樹形結(jié)構(gòu)數(shù)據(jù),獲取所有數(shù)組id集合的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【數(shù)據(jù)結(jié)構(gòu)】樹形結(jié)構(gòu)所有路徑復原為鏈表

    【數(shù)據(jù)結(jié)構(gòu)】樹形結(jié)構(gòu)所有路徑復原為鏈表

    目錄 1. 樹形結(jié)構(gòu)可視化 2. 樹形結(jié)構(gòu)轉(zhuǎn)為鏈表 此目標是要還原樹形結(jié)構(gòu)的所有路徑。樹形結(jié)構(gòu)是一種常見的數(shù)據(jù)結(jié)構(gòu),它表示元素之間層次關(guān)系。在樹形結(jié)構(gòu)中,每個節(jié)點可能擁有一個或多個子節(jié)點,形成了一個分層的結(jié)構(gòu)。為了還原樹形結(jié)構(gòu)的路徑,我們需要找到從根節(jié)點

    2024年02月06日
    瀏覽(26)
  • js中遍歷對象數(shù)組并獲取對象相應(yīng)的屬性值

    JavaScript中遍歷對象數(shù)組的方法有很多種。以下是常見的四種常見的方法: for ?循環(huán), for...of ?循環(huán), forEach ?方法和 map ?方法,在遍歷的同時,通過訪問對象的屬性來獲取相應(yīng)的值。 ? for ?循環(huán): ? for...of ?循環(huán): ? forEach ?方法: ? map ?方法(通常用于創(chuàng)建一個

    2023年04月25日
    瀏覽(25)
  • 【數(shù)據(jù)結(jié)構(gòu)】二叉樹(遍歷,遞歸)

    【數(shù)據(jù)結(jié)構(gòu)】二叉樹(遍歷,遞歸)

    ???個人主頁: 秦jh__https://blog.csdn.net/qinjh_?spm=1010.2135.3001.5343 ???系列專欄: 《數(shù)據(jù)結(jié)構(gòu)》https://blog.csdn.net/qinjh_/category_12536791.html?spm=1001.2014.3001.5482 ??? 目錄 二叉樹遍歷規(guī)則 前序遍歷 ? 中序遍歷 ?后序遍歷 遞歸結(jié)構(gòu)遍歷 前序 中序 ?求節(jié)點個數(shù) 求葉子節(jié)點個數(shù) ?求樹

    2024年01月19日
    瀏覽(21)
  • 【數(shù)據(jù)結(jié)構(gòu)|二叉樹遍歷】遞歸與非遞歸實現(xiàn)前序遍歷、中序遍歷、后序遍歷

    【數(shù)據(jù)結(jié)構(gòu)|二叉樹遍歷】遞歸與非遞歸實現(xiàn)前序遍歷、中序遍歷、后序遍歷

    遞歸與非遞歸實現(xiàn)二叉樹的前序遍歷、中序遍歷、后序遍歷。 二叉樹圖 定義 前序遍歷(Preorder Traversal): 前序遍歷的順序是先訪問根節(jié)點,然后按照先左后右的順序訪問子節(jié)點。對于上面的二叉樹,前序遍歷的結(jié)果是:4 - 2 - 1 - 3 - 6 - 5 - 7。 中序遍歷(Inorder Traversal): 中

    2024年02月14日
    瀏覽(16)
  • Java獲取樹形結(jié)構(gòu)數(shù)據(jù)

    Java獲取樹形結(jié)構(gòu)數(shù)據(jù)

    目錄 前言: 開發(fā)前準備: 數(shù)據(jù)庫: 實體類: VO對象: 代碼實現(xiàn): Controller層: Service層: 運行結(jié)果: 第二種 在日常的開發(fā)或者工作需求中,我們會用到樹形結(jié)構(gòu)數(shù)據(jù)。樹形結(jié)構(gòu)是一個比較常用的數(shù)據(jù)類型,一般多用于查詢包含父子類關(guān)系的數(shù)據(jù)。我們常常通過父級id和層

    2024年02月12日
    瀏覽(23)
  • 【算法】遞歸解決各種數(shù)據(jù)結(jié)構(gòu)的遍歷問題

    對于遞歸算法,我們最先想到的應(yīng)該就是用遞歸的方式去中序遍歷一棵樹,遞歸的使用使得我們可以先深入到下層中,然后慢慢的輸出下層的元素之后輸出上層元素。 因此,基于此,我們甚至可以使用遞歸來逆序輸出一個棧,鏈表等數(shù)據(jù)結(jié)構(gòu)。 使用遞歸輸出樹 使用遞歸逆序

    2024年02月08日
    瀏覽(17)
  • 【數(shù)據(jù)結(jié)構(gòu)】二叉樹的遍歷遞歸算法詳解

    【數(shù)據(jù)結(jié)構(gòu)】二叉樹的遍歷遞歸算法詳解

    我們來寫一個函數(shù) BuyNode(x)函數(shù) 用于創(chuàng)建二叉樹結(jié)點。 用動態(tài)開辟函數(shù) malloc 函數(shù)進行動態(tài)開辟,并強制轉(zhuǎn)換為 BTNode 型,用變量 node 來去管理開辟的空間。 我們初始化結(jié)點,其 val 即為傳入的參數(shù)x,左右指針 left 和 right 都設(shè)為NULL。 我們在主函數(shù)中創(chuàng)建上面這樣一顆二叉樹

    2024年01月20日
    瀏覽(31)
  • 探索樹形數(shù)據(jù)結(jié)構(gòu),通識樹、森林與二叉樹的基礎(chǔ)知識(專有名詞),進一步利用順序表和鏈表表示、遍歷和線索樹形結(jié)構(gòu)

    探索樹形數(shù)據(jù)結(jié)構(gòu),通識樹、森林與二叉樹的基礎(chǔ)知識(專有名詞),進一步利用順序表和鏈表表示、遍歷和線索樹形結(jié)構(gòu)

    ? 結(jié)點之間有分支,具有層次關(guān)系 樹的定義 : 樹 (tree)是n(n≥0)個有限集。 若n = 0,則稱為空樹; 若n 0,則它滿足如下兩個條件: 有且僅有一個特定的稱為根(Root)的結(jié)點; 其余結(jié)點可分為m(m≥0)個互不相交的有限集T1,T2,T3,.....,Tm,其中每一個集合本身又是一棵樹,并稱為根的

    2024年02月01日
    瀏覽(100)
  • 【Java數(shù)據(jù)結(jié)構(gòu)】二叉樹的前中后序遍歷(遞歸和非遞歸)

    【Java數(shù)據(jù)結(jié)構(gòu)】二叉樹的前中后序遍歷(遞歸和非遞歸)

    二叉樹遍歷是二叉樹的一種重要操作 必須要掌握 二叉樹的遍歷可以用遞歸和非遞歸兩種做法來實現(xiàn) 前序遍歷的遍歷方式是 先根節(jié)點 在左節(jié)點 在右節(jié)點 述這棵樹前序遍歷的結(jié)果是: A B D E C F G 遞歸的思想就是把問題拆分成一個個小問題來解決 treeNode是一個內(nèi)部類 具體實現(xiàn)

    2023年04月26日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包