当返回值位于if语句内部时,如何为函数提供返回值

时间:2019-01-09 09:27:47

标签: javascript arrays object

我有一个最初是这样的功能,并且可以正常工作:

  productGroupPages(): PDF.Page[] {
    const descriptions = {};
    this.areas.forEach(area => descriptions[area.id] = area.description);
    return this.json.engagementAreas.map(area => {
      return this.productGroupPage(area, descriptions[area.id]);
    });
  }

基本上所有内容都没有包装在其中。

我不得不更改函数,因为我想对每个函数进行一次处理,然后使用if语句,这样我只会返回实际上包含某个值的值,结果是我的return语句为时过早,由于for循环,我无法将其移至末尾,而且我还在努力寻找解决方法,

此新功能:

  productGroupPages(): PDF.Page[] {
    const descriptions = {};
    let pages = {};
    console.log('this .json' + JSON.stringify(this.json))
    this.json.engagementAreas.forEach(area => {
      descriptions[area.id] = area.description

      if (area.engagementTypes.length !== 0) {

        return this.json.engagementAreas.map(area => {
          return this.productGroupPage(area, descriptions[area.id]);
        });
      }
    })
  }

我尝试创建变量,数组或对象,并将其等于返回值,然后在范围的末尾返回该值,但这让我说返回类型错误。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

我认为您使用forEachmap分隔的初始代码非常干净!

新代码的问题是,在return中使用.forEach()在javascript中没有意义;)每当您从.forEach()返回时,javascript都会忽略结果:

let result = [1,2,3].forEach(x => {
  return x * 2;
});
result // undefined

我认为您只想返回一些area -s,您可以使用array.filter()来完成,如下所示:

productGroupPages(): PDF.Page[] {
  const descriptions = {};
  this.areas.forEach(area => descriptions[area.id] = area.description);
  return this.json.engagementAreas
    .filter(area => area.engagementTypes.length !== 0)
    .map(area => {
      return this.productGroupPage(area, descriptions[area.id]);
    });
}

我希望这实际上是您想要做的,如果是这样,我希望它能起作用:)