簡體   English   中英

在打字稿中使用遞歸函數過濾數組

[英]Filter array with recursive function in typescript

我有以下json數據:

[  
   {  
      "product":{  
         "id_product":"1"
      }
      "id_productParent":""
   },
   {  
      "product":{  
         "id_product":"2"
      },
      "id_productParent":"1"
   },
   {  
      "product":{  
         "id_product":"3"
      },
      "id_productParent":"2"
   },
   {  
      "product":{  
         "id_product":"4"
      },
      "id_productParent":"3"
   }
]

我需要返回一個包含產品的所有后代的Array,其中產品的后代被定義為(以偽代碼形式),就像這樣的descendant(x) = return (p=> p.id_productParent==x.product + descendant(p))

我該如何解決打字稿?

這是此類senario的基准:

var g=[  
   {  
      "product":{  
         "id_product":"1"
      },
      "id_productParent":""
   },
   {  
      "product":{  
         "id_product":"2"
      },
      "id_productParent":"1"
   },
   {  
      "product":{  
         "id_product":"3"
      },
      "id_productParent":"2"
   },
   {  
      "product":{  
         "id_product":"4"
      },
      "id_productParent":"2"
   }
]


function eachRecursive(id)
{
  var t=g.filter(i=>i.id_productParent==id);

  if (!t.length) 
  {
    console.log(id)
    return id;
  }
  else

  t.forEach(i=>{
    eachRecursive(i.product.id_product);
  })

}


eachRecursive(2) //3,4

我用以下解決方案解決了。 productsid尊重要為其查找其后代的產品數組和產品的id,我將其過濾如下:

...
 this.g = this.products.filter(p => this.isDescendant(p, id));
...
 isDescendant(p, id){
       if(p.id_productParent == id)
        return true;
       if(!p.id_productParent)
         return false;
       return this.isDescendant(this.products.filter(p => p.product.id_product == p.id_productParent)[0], id);

     }

現在在this.g我擁有id所有后代

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM