Javascript 当返回在if语句中时,如何为函数指定返回值

Javascript 当返回在if语句中时,如何为函数指定返回值,javascript,arrays,object,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

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

  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]);
    });
  }
基本上,并不是所有的东西都包含在for-each中

我不得不改变函数,因为我想通过一个for-each,然后使用if语句,这样我只返回实际包含某个值的值,结果是我的返回语句太早了,因为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]);
        });
      }
    })
  }
我尝试创建一个变量、数组或对象,并将其与返回值相等,然后在接近作用域结尾处返回,但这不会让我知道返回类型是错误的


任何帮助都将不胜感激。

我认为您最初的代码,用
forEach
map
分隔,非常干净

新代码的问题在于,在
.forEach()中使用
return
在javascript中没有意义无论何时从
.forEach()
返回,javascript都会忽略结果:

let result = [1,2,3].forEach(x => {
  return x * 2;
});
result // undefined
我想您只想返回一些
区域
-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]);
    });
}

我希望这就是你想要做的,如果是这样的话,我希望它能起作用:)

你能给出一个具体的示例,说明示例输入和它的预期输出吗?在
.forEach()
中有一个
返回值,但这没有任何作用,就像
.forEach()
忽略返回的值,本身不返回任何内容。您似乎希望执行
.filter()
后接
.map()
而不是
.forEach()
注意:
数组。forEach
不返回anything@Rajesh现在我看了一下修改后的代码,函数本身也没有。它以前返回
.map()
的结果,现在它只执行
.forEach()
,甚至没有
return
语句。我建议您执行
this.json.engagementreas.forEach(area=>{if(area.engagementTypes.length!==0){descriptions[area.id]=area.description})
然后循环描述嘿,我喜欢json.engagements上的返回方式,然后操作数据。我想知道有多少页是由这个创建的,但.map创建了一个this.productGroupPage结果数组。