Как СУШИТЬ эти математические вычисления JS - PullRequest
0 голосов
/ 29 января 2019

Ниже приведены математические вычисления, которые повторяются, и я пытаюсь выяснить, как сделать их СУХИМЫМИ.

const d     = store.state.logbook.summary,
      AIR   = ([d.AIR/d.TOT]*100).toFixed(2),
      PIC   = ([d.PIC/d.TOT]*100).toFixed(2),
      PMC   = ([d.PMC/d.TOT]*100).toFixed(2),
      VO    = ([d.VO/d.TOT]*100).toFixed(2),
      TRNG  = ([d.TRNG/d.TOT]*100).toFixed(2);

this.chartData = [
  100, +AIR, +PIC, +PMC, +VO, +TRNG
]
console.log(this.chartData)
// Returns: [100, 97.44, 84.65, 84.65, 2.56, 12.79]!

1 Ответ

0 голосов
/ 29 января 2019

Вы можете взять массив ключей, вычислить вычисленное значение, отменить смещение 100 и назначить требуемую цель.

const
    d = store.state.logbook.summary,
    data = ['AIR', 'PIC', 'PMC', 'VO', 'TRNG'].map(k => +(d[k] * 100 / d.TOT).toFixed(2));

data.unshift(100);
this.chartData = data;
console.log(this.chartData);

Еще один взгляд на проблему, разбив каждую часть на более мелкие единицы, например

  • получение значения объекта
  • получение значения в процентах путем принятия первого связанного параметра функции и сопоставления значений
  • форматирование значения втребуется максимум две цифры.

const
    getPercent = (whole, part) => part * 100 / whole,
    getNumFixed2 = value => +value.toFixed(2),
    d = { AIR: 28, PIC: 9, PMC: 2, VO: 56, TRNG: 25, TOT: 120 }, // store.state.logbook.summary,
    data = ['AIR', 'PIC', 'PMC', 'VO', 'TRNG']
        .map(k => d[k])
        .map(getPercent.bind(null, d.TOT))
        .map(getNumFixed2);

data.unshift(100);
console.log(data);
...