【问题标题】:How to DRY These JS Math Computations如何干燥这些 JS 数学计算
【发布时间】:2019-06-22 22:22:44
【问题描述】:

我在下面有这些重复的数学计算,我正在尝试弄清楚如何使它们变干。

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]!

【问题讨论】:

  • 不要使用[...] 作为内部分组。是的,它在这种情况下特别有效,因为 JavaScript 将单位数组字符串化为数字字符串,然后 * 将其转换回数字,但这是真的不好的做法。
  • 您到底想烘干什么? toFixed *100?查看reduce 函数。
  • Thnx @PatrickRoberts 在 js 中做数学对我来说是一个新世界——很高兴知道。
  • 看起来更适合codereview.stackexchange.com
  • Codereview 是针对“有意见的”问题。这也是其他人可以学习的。

标签: javascript math dry computation


【解决方案1】:

您可以获取一个键数组,映射计算的值,取消移位 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);

【讨论】:

    猜你喜欢
    • 2016-09-03
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多