如何将英制转换为公制单位?

时间:2019-10-01 15:18:31

标签: javascript reactjs math units-of-measurement

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

比方说,我有一个数据对象,该数据对象具有数量,度量和类型,例如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

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

1 个答案:

答案 0 :(得分:0)

您可以有一个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);