Преобразуйте 2 очень похожие функции в одну - PullRequest
0 голосов
/ 23 мая 2019

У меня есть эти две функции, которые очень очень похожи:

setEndTimes(pricerules: PriceRule[]) {
    this.endTimes = [];
    pricerules.forEach(pricerule => {
      this.endTimes.push({
        hour: Number(pricerule.endTime.split(':')[0]),
        minute: Number(pricerule.endTime.split(':')[1])
      });
    });
  }

  setStartTimes(pricerules: PriceRule[]) {
    this.startTimes = [];
    pricerules.forEach(pricerule => {
      this.startTimes.push({
        hour: Number(pricerule.startTime.split(':')[0]),
        minute: Number(pricerule.startTime.split(':')[1])
      });
    });
  }

Как преобразовать эти две функции в одну?

Ответы [ 2 ]

1 голос
/ 23 мая 2019

Вы можете реорганизовать код, который проецирует массив из pricerules в функцию, установить свойства и использовать bracket notation для доступа к свойству объекта.

setEndTimes(pricerules: PriceRule[]) {
    this.endTimes = returnTimes(pricerules, 'endTime');
}

setStartTimes(pricerules: PriceRule[]) {
    this.startTimes = returnTimes(pricerules, 'startTime');
}

returnTimes(pricerules, time) {
    return pricerules.map(x => (
    {
                    hour: Number(x[time].split(':')[0]),
                    minute: Number(x[time].split(':')[1])
    }));
}
1 голос
/ 23 мая 2019

Вы бы динамические свойства для этого случая, как:

setTimes(pricerules: PriceRule[], _times: string) {
    this[`${_times}s`] = [];
    pricerules.forEach(pricerule => {
      this[`${_times}s`].push({
        hour: Number(pricerule[_times].split(':')[0]),
        minute: Number(pricerule[_times].split(':')[1])
      });
    });
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...