Как реализовать формулу с вводом множества данных не дублируя переменные?

Рейтинг: 1Ответов: 1Опубликовано: 06.02.2023

столкнулся с проблемой, написал формулу (простую): введите сюда описание изображения

Как реализовать на JS такую формулу (допустим на 3-4 J): введите сюда описание изображения

J (если что в файле-техничке в глобал вынесены у меня, тут записал как 6.9 и t3 - то же самое), добавляю их в формулу просто такими же значениями (предварительно подключив, понятно).

let resultVmin;
function breakWayMin() {
    const form = document.querySelector('#formInputMin');
    const Sj = +form[0].value;
    const L = +form[1].value;
    resultVmin = 1.8 * 0.25 * 6.9 + (Math.sqrt(25.92 * ((Sj - L)) * 6.9));
    console.log(+resultVmin.toFixed(2));
    const result = document.querySelector('#resultVmin');
    result.innerText = `Результат: ${Number(resultVmin.toFixed(2))}`;
    return +resultVmin.toFixed(2);

}
<h1>Мин скорость</h1>

<form id="formInputMin">
    <div>
        <label>Sюз</label>
        <input type="number">
    </div>
    <div>
        <label>L</label>
        <input type="number">
    </div>

</form>

<button>Результат Vmin</button>
<h2 id="resultVmin"></h2>

и ещё вопрос - если у меня куча J - как их продублировать что-ли, чтобы не копировать в техническом JS файле, ибо их там очень много( Чтобы (может) создать J2 а значения оно подтягивало из J (ну это второстепенный вопрос). Буду благодарен за помощь

Ответы

▲ 0Принят

Вот пример реализации множественного ввода значений без необходимости создания кучи переменных

    const form = document.getElementById('formInputMin');
    const resField = document.querySelector('#resultVmin')
    const variables = [];
    const values = {
      s: 0,
      l: 0
    }

    function inputVariable(type, idx) {
      const inp = document.createElement('input');
      inp.type = 'number';
      inp.value = values[type];
      inp.addEventListener('input', function() {
        variables[idx][type] = this.value
      })
      return inp;
    }

    function craeteDiv(label, len) {
      const div = document.createElement('div');
      div.innerHTML = `<label>${label}(${len+1})</label>`
      div.append(inputVariable(label, len))
      return div;
    }

    function addInput() {
      form.append(craeteDiv('s', variables.length));
      form.append(craeteDiv('l', variables.length));
      variables.push({ ...values });
    }
    addInput();

    function breakWayMin() {
      const sjL = variables.reduce((acc, item) => acc + item.s * item.l, 0);
      const result = 1.8 * 0.25 * 6.9 + (Math.sqrt(25.92 * (sjL) * 6.9));
      resField.innerHTML = `Результат: ${result.toFixed(2)}`;      
    }
<h1>Мин скорость</h1>

<form id="formInputMin">

</form>
<br />
<button>Еще переменная</button>
<br />
<button>Результат Vmin</button>
<hr />
<h2 id="resultVmin"></h2>