在typescript中使用递归函数过滤数组

时间:2017-07-11 09:54:24

标签: javascript 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"
   }
]

我需要返回一个数组,其中包含产品的所有后代,其中定义了产品的后代(伪代码),如下所示 descendant(x) = return (p=> p.id_productParent==x.product + descendant(p))

我怎样才能用打字稿解决这个问题?

2 个答案:

答案 0 :(得分:0)

以下是这种情况的基线:

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

答案 1 :(得分:0)

我用以下解决方案解决了。 让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

的所有后代