Дублирование кода в JavaScript

при написании кода я, чтобы решить проблему, не нашёл ничего "умнее" чем продублировать часть кода, но как и ожидалось мне прилетело по шапке. Подскажите как объединить 2 практически идентичных куска кода в один метод? прилагаю код ниже.

const {
  errors,
  ...statsJson
} = statistics.toJson()

const stats = {
    ........
  ): [],
}

if (statistics.stats) {
  statistics.stats.forEach(_stats => {
      const {
        errors,
        ...statsJson
      } = _stats.toJson()

      const objectStats = {
          .........
        ): [],
    }
    this.emitter.emit('stats', {
        caller: 'webpack',
        data: objectStats
      }
      as Emitter.Stats)
  })
} else {
  this.emitter.emit('stats', {
      caller: 'webpack',
      data: stats
    }
    as Emitter.Stats)
}


Ответы (1 шт):

Автор решения: Gosha

вам нужна функция которая будет возвращать объект, как пример:

const {errors, ...statsJson} = statistics.toJson();

const generateStats = (inputStats, statsJson) => () => {
        .......
    ) : []
};

if (statistics.stats) {
    statistics.stats.forEach(_stats => {
        const {errors, ...statsJson} = _stats.toJson();

        this.emitter.emit('stats', {caller: 'webpack', data: generateStats(_stats, statsJson)} as Emitter.Stats);
    });
} else {
    this.emitter.emit('stats', {caller: 'webpack', data: generateStats(webpackStats, statsJson)} as Emitter.Stats);
}
→ Ссылка