Как дать функции возвращаемое значение, когда возвращение находится внутри оператора if - PullRequest
0 голосов
/ 09 января 2019

У меня была функция, которая изначально была такой и работала:

  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 голосов
/ 09 января 2019

Я думаю, ваш исходный код с разделенными forEach и map был очень чистым!

Проблема с вашим новым кодом в том, что использование 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]);
    });
}

Я надеюсь, что это действительно то, что вы хотели сделать, и если это так, я надеюсь, что это работает:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...