@Reflections

Как правильно реализовать логику конвертера?

Здравствуйте всем.

Работаю над пет-проектом - конвертер величин. Статические данные (масса, скорость, расстояние и.т.д.) и динамические (курсы валют по запросам к бесплатным API). Пока все в работе.

Дано n-ое кол-во типов величин. При нажатии на каждое, в ul-списки подгружаются списки величин, которые принадлежат к соответствующему типу величины.

Это разметка блока с конвертацией.
<div class="converter">
				<div class="converter__block converter__initial">
					<h3 class="h3">Исходная величина</h3>
					<div class="converter-box">
						<ul class="converter-box__list">
							<li class="converter-box__list-item current-value">Выберите тип значения</li>
							<ul class="dropdown-list hidden">
								<!--Список подгружается из объекта categories-->
							</ul>
						</ul>
						<div class="converter-box__input-block">
							<input type="number" value="" placeholder="Введите..." class="converter-box__input">
						</div>
					</div>
				</div>
				<div class="converter__arrow">
					<img src="assets/img/arrow.svg" alt="" class="svg-icon arrow-img">
				</div>
				<div class="converter__block converter__final">
					<h3 class="h3">Во что преобразуем?</h3>
					<div class="converter-box">
						<ul class="converter-box__list">
							<li class="converter-box__list-item current-value">Выберите тип значения</li>
							<ul class="dropdown-list hidden">
								<!--Список подгружается из объекта categories-->
							</ul>
						</ul>
						<div class="converter-box__input-block">
							<input type="number" value="" placeholder="Введите..." class="converter-box__input">
						</div>
					</div>
				</div>
			</div>


Есть общий объект categories. Вот один из объектов этого главного объекта (остальные точно такие же).
mass: {
		title: 'Масса',
		element: null,
		data: {
			ton: {
				name: "Тонна",
				value: 1000
				},
			 centner: {
				name: "Центнер",
				value: 100
				},
			 kg: {
				name: "Килограмм",
				value: 1
				},
			 g: {
				name: "Грамм",
				value: 0.001
				},
			 mg: {
				name: "Миллиграмм",
				value: 0.000001
				},
			 carat: {
				name: "Карат",
				value: 20
				}
		},


Вопрос - как реализовать логику конвертера, именно момент ввода значения в input, подхватывания нужного элемента объекта и просчета?
У меня не хватает практического опыта, чтобы написать работающую логику конвертера. Предполагаю, что логика выглядит примерно так:
- в первом Выберите тип значения висит текущая величина, со своим value
- во втором Выберите тип значения висит величина, в которую нужно конвертировать первое значение, также со своим value
- когда значение вводится в input, то вычисление происходит по формуле input * (value-2 / value-1) = output. Если пользователь вводит значение во второй input, то все зеркально

Это примерная картинка. Есть основные вопросы:
- для этого обязательно в каждом типе величин должна быть одна эталонная величина с value = 1? (а остальные уже пляшут от нее)
- как правильно реализуется момент "подхватывания значения" нужным input'ом? (когда выбираешь нужную величину из списка, перед тем как вводить значение)

Выглядит примерно вот так.
62c81344e9393691086549.jpeg

Буду признателен за помощь.
  • Вопрос задан
  • 100 просмотров
Пригласить эксперта
Ответы на вопрос 1
mayton2019
@mayton2019
Bigdata Engineer
Эта формула - недостаточная для других конверсий.
input * (value-2 / value-1)
Например Цельсии и Фаренгейты - это умножение и сложение. Вобщем недостаточно одного value.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы