[英]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
我用以下解決方案解決了。 讓products
和id
尊重要為其查找其后代的產品數組和產品的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.