Проблемы усреднения - PullRequest
0 голосов
/ 04 июня 2018

У меня есть следующая функция в javascript для вычисления среднего:

function calculaMediaFinal () {
    var soma = 0;
    for(var i = 1; i>5; i++) { 
        soma += parseInt(document.getElementById('resultado' + i).value, 10); 
    }

    var media = soma / 5;

    var inputCuboMedia = document.getElementById('ConcretizaObj');
    inputCuboMedia.value = parseInt(media, 10);
}

function ContarObjetivos() {
    let contador = 0;
    if(document.getElementById('resultado' + i).value) {
        contador++;
    }
}

Но у меня есть проблема, это то, что я добавил, что максимум 5, что не соответствует действительности, потому что пользователькто выбирает, сколько результатов он хочет.То есть 5 не может быть заполнено, если пользователь хочет только 4. Как мне усреднить без числа 5, но с количеством результатов, которые хочет пользователь?

Ответы [ 3 ]

0 голосов
/ 04 июня 2018

Вы можете сделать это так.

  • создать элемент input и позволить пользователю передавать каждое число в него через пробел
  • создать button, который вызовет код, вычисляющий среднее значение
  • создать элемент, который будет хранить результат

Для выполнения фактических вычислений

  • получить значение поля ввода, разделить его на пробел ' ', удалить пробелы вокруг каждого отдельногочисло, используя trim
  • , суммируйте массив, созданный на предыдущем шаге, используя reduce
  • , делите сумму на количество предоставленных чисел

const input = document.querySelector('input');
const btn = document.querySelector('button');
const res = document.querySelector('p > span');

function getAverage() {
  const values = input.value.split(' ').map(v => v.trim());
  const sum = values.reduce((acc, v) => acc + Number(v), 0);
  res.textContent = (sum / values.length);
}

// 1 2 3 4 5 6 7 8 9 10
btn.addEventListener('click', getAverage);
<input type='text' />
<button>get average</button>
<p>result: <span></span></p>

Когда вы передаете числа в поле ввода один за другим через пробел (попробуйте передать 1 2 3 4 5 6 7 8 9 10), а затем нажмите кнопку, чтобы выполнить вычисление, которое затем будетпоказано в элементе span.

0 голосов
/ 04 июня 2018

Ваш цикл не был выполнен:

  • В for вторым параметром является условие, для которого будет выполняться итерация (true = execute).Изменение > на <= заставило его работать.
  • Я также объединил ваши две функции, чтобы не заполненное input не учитывалось.

Вот рабочаяфрагмент, где я использовал весь ваш код:

// Merged both function:
function calculaMediaFinal() {
  let soma = 0;
  let contador = 0;
  for (var i = 1; i <= 5; i++) { // Changed > to <= here
    if (document.getElementById('resultado' + i).value) {
      soma += parseInt(document.getElementById('resultado' + i).value, 10);
      contador++;
    }
  }
  var media = soma / contador;
  var inputCuboMedia = document.getElementById('ConcretizaObj');
  inputCuboMedia.value = parseInt(media, 10);
}
<input id="resultado1"><br>
<input id="resultado2"><br>
<input id="resultado3"><br>
<input id="resultado4"><br>
<input id="resultado5"><br>
<button onclick="calculaMediaFinal();">calcula</button>
<br> Media:
<input id="ConcretizaObj">

⋅ ⋅ ⋅

Если вам не нужно , нужно для указания "базы" вФункция parseInt, я также предлагаю вам использовать унарный оператор +:

// Merged both function:
function calculaMediaFinal() {
  let soma = 0;
  let contador = 0;
  for (var i = 1; i <= 5; i++) { // Changed > to <= here
    if (document.getElementById('resultado' + i).value) {
      soma += +document.getElementById('resultado' + i).value;
      contador++;
    }
  }
  var media = soma / contador;
  document.getElementById('ConcretizaObj').value = media;
}
<input id="resultado1"><br>
<input id="resultado2"><br>
<input id="resultado3"><br>
<input id="resultado4"><br>
<input id="resultado5"><br>
<button onclick="calculaMediaFinal();">calcula</button>
<br> Media:
<input id="ConcretizaObj">

Надеюсь, это поможет.

0 голосов
/ 04 июня 2018

Если я правильно понимаю ваш вопрос, вы хотите что-то вроде этого.Создайте новое числовое поле ввода, в котором будет храниться сумма, которую хочет пользователь.Поместить значение поля ввода в переменную и использовать его в своем коде?Также, вероятно, для выполнения должен быть указан символ '<=' в цикле for.Например, </p>

HTML добавьте следующую строку в ваш код:

<input type="number" id="userAmount" />

Javascript:

function calculaMediaFinal () {
    var soma = 0;
    var amount = parseInt(document.getElementById("userAmount").value);
    for(var i = 1; i<=amount; i++) { 
        soma += parseInt(document.getElementById('resultado' + i).value, 10); 
    }
    var media = soma / amount;

    var inputCuboMedia = document.getElementById('ConcretizaObj');
    inputCuboMedia.value = parseInt(media, 10);
    }

    function ContarObjetivos(){
        let contador = 0;
            if(document.getElementById('resultado' + i).value) {
                contador++;
            }
    }
...