【问题标题】:How to convert imperial to metric units?如何将英制单位转换为公制单位?
【发布时间】:2020-01-30 22:18:54
【问题描述】:

这更像是一个关于代码和数学的一般问题。我数学一点也不擅长,我还在学习如何在编程中应用数学。

假设我有一个数据对象,其中包含数量、度量和类型,例如 feetlb

const data = {
  0: {
    'type': 'imperial',
    'unit': 'ft',
    'amount': 3 
  },
  1: {
    'type': 'imperial',
    'unit': 'lb',
    'amount': 5
  },
  2: {
    'type': 'imperial',
    'unit': 'mph',
    'amount': 7 
  }
}

我需要遍历这些数据并根据类型转换每个数据(假设类型就是它的名字)

Object.keys(data).map(key => {
    convert(data[key]['amount'], data[key]['type'], data[key]['unit'])
})

该函数将其转换为:

const convert = (amount, type, unit) => {
   const calc = // ???
   return calc;
}

我的问题是,如何根据测量类型进行转换?我知道 1 英尺是 0.3048 米,如果我需要将 5 英尺转换为米,我会这样做 5*0.3048

但是,我如何在代码中应用它,包含英制和公制单位列表,以及如何将它添加到转换函数?

【问题讨论】:

  • 第一步,您可以在if (type == "imperial") { ... }if (unit == "feet") return amount * 0.3048; 中进行操作
  • 也许您还需要知道要转换成哪个单位,例如 mph 变成 m/s 或 km/h?
  • 是的,我可以理解如何使用 mathsisfun.com/metric-imperial-conversion-charts.html 之类的东西进行转换,只是不确定如何在代码中应用它......
  • @ChrisG 我可能需要进行大约 10 次测量。如果这些单元存储在它自己的对象中并且我会遍历每个对象,这会是什么样子?我还需要通过点击事件将公制转换为英制...

标签: javascript reactjs math units-of-measurement


【解决方案1】:

您可以拥有一个 converter 对象,其中包含要转换的功能和要显示的标签,这是一个示例(根据需要调整值和单位):

const data = {
  0: {
    type: "imperial",
    unit: "ft",
    amount: 3
  },
  1: {
    type: "imperial",
    unit: "lb",
    amount: 5
  },
  2: {
    type: "imperial",
    unit: "mph",
    amount: 7
  }
};

const converter = {
  imperialToMetric: {
    ft: val => val * 0.3048,
    lb: val => val * 0.453592,
    mph: val => val * 1.60934,
    labels: {
      ft: "meters",
      lb: "Kg",
      mph: "kmh"
    }
  },
  metric: {
    // reverse the above
  }
};

const result = Object.values(data).map(({ amount, type, unit }) => ({
  amount: converter.imperialToMetric[unit](amount),
  unit: converter.imperialToMetric.labels[unit],
  type: "metric"
}));

console.log(result);

【讨论】:

  • 当你说反向时,你的意思是除而不是乘?
  • 我将如何只转换一次一个对象并存储它?与问题无关,但我很好奇在这种情况下我会怎么做。
  • 不一定,你可以查看转换表(但是做一个快速匹配,是的你可以除而不是乘),只转换一次,你可以做const result = { amount: converter.imperialToMetric[data[0].unit](data[0].amount), unit: converter.imperialToMetric.labels[data[0].unit], typ: "metric" };
猜你喜欢
  • 1970-01-01
  • 2010-09-24
  • 2019-03-20
  • 1970-01-01
  • 2017-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多