Как можно оптимизировать конвертер?
Есть данные в JSON файле:
const unitsObj = [
{
distance: {
unit: "m",
value: 0.5,
},
convertTo: "ft",
},
{
distance: {
unit: "m",
value: 0.5,
},
convertTo: "cm",
},
]
И есть конвертер, который я написал:
const unitsObj = [
{
distance: {
unit: "m",
value: 0.5,
},
convertTo: "ft",
},
{
distance: {
unit: "m",
value: 0.5,
},
convertTo: "cm",
},
];
const metersConversion = () => {
unitsObj.forEach((item) => {
let distanceUnit = item.distance.unit;
let unitValue = item.distance.value;
let convertTo = item.convertTo;
if (distanceUnit == "m" && convertTo == "ft") {
let conversionResult = {
unit: convertTo,
value: (unitValue * 3.28).toFixed(2),
};
console.log(conversionResult);
}
if (distanceUnit == "m" && convertTo == "cm") {
let conversionResult = {
unit: convertTo,
value: (unitValue * 100).toFixed(2),
};
console.log(conversionResult);
}
});
};
metersConversion();
Но если добавлять новые единицы, то код становиться большим. Есть ли варианты уменьшить код и как-то оптимизировать конвертер? Буду благодарен за помощь)
Ответы (1 шт):
Автор решения: EzioMercer
→ Ссылка
Если из JSON-a не приходит множитель и всегда надо переводить метры во что-нибудь, то можете попробовать так:
const unitsObj = [
{
distance: {
unit: "m",
value: 0.5,
},
convertTo: "ft",
},
{
distance: {
unit: "m",
value: 0.5,
},
convertTo: "cm",
},
];
const getMultiplier = (convertUnit) => {
switch (convertUnit) {
case 'cm':
return 100;
case 'ft':
return 3.28;
default:
throw new Error('Can not convert to this unit');
}
}
const metersConversion = () => {
unitsObj.forEach((item) => {
const unitValue = item.distance.value;
const convertTo = item.convertTo;
const multiplier = getMultiplier(convertTo);
console.log({
unit: convertTo,
value: (unitValue * multiplier).toFixed(2)
});
});
};
metersConversion();