JavaScript найти сумму значений массива

1

У меня есть выбранный список зарплат, и я пытаюсь найти сумму всех значений массива, превышающую значение, выбранное из списка. Я не могу получить код для вывода суммы.

salaries = [59360, 37012, 30301, 39738, 39169, 52832, 42132, 41220, 36901, 54497, 53108, 32553, 43023, 51505, 31499];

document.getElementById('go').onclick = function() {
  var numberFilter = document.getElementById('filter').value;
  total = 0;
  for (index = 0; index < salaries.length; index++) {
    if (salaries[index] > numberFilter) {
      total = total + salaries[index];
      document.getElementById('result').value = total;
    };
  };
};
<select id='filter' name=''>
  <option value = '0'>0</option>
  <option value = '30000'>30000</option>
  <option value = '35000'>35000</option>
  <option value = '40000'>40000</option>
  <option value = '45000'>45000</option>
  <option value = '50000'>50000</option>
  <option value = '55000'>55000</option>
</select>

<button id='go' class=''>GO</button>
<input id='result' name='' value='' class=''>
<input id='count' name='' value='' class=''>
<script src='js/javascript 15.js'></script>
  • 0
    Что такое numbers ?
  • 0
    Вы хотели сказать «зарплаты» вместо «цифры»? (@Ssswift спросил, что я собирался спросить :)
Показать ещё 8 комментариев
Теги:

5 ответов

2

Похоже, есть несколько вещей, которые нужно изменить:

  • numbers должны быть изменены на salaries (поскольку числа не являются определенной переменной в вашем коде)

  • 30 необходимо изменить на numberFilter, так как вы пытаетесь найти сумму всех значений массива больше, чем numberFilter, а не 30

  • Вам нужно только обновить результат один раз: после того, как сумма была рассчитана. Вам не нужно обновлять результат во время каждой итерации цикла for. Обновление на каждой итерации все равно будет работать, но оно не является ни необходимым, ни эффективным.

  • Лучшее расстояние

Таким образом, ваш код станет

salaries = [59360, 37012, 30301, 39738, 39169, 52832, 42132, 41220, 36901, 54497, 53108, 32553, 43023, 51505, 31499];

document.getElementById('go').onclick = function () {

    var numberFilter = document.getElementById('filter').value;

    total = 0;

    for (index = 0; index < salaries.length; index++) {

        if (salaries[index] > numberFilter) {

            total = total + salaries[index];

        };

    };

document.getElementById('result').value = total;

};
  • 0
    @ Посмотрите, вот что я подумал, но когда я запустил его, он все равно не отображается в моем текстовом поле результатов. Я не получаю никаких номеров там
  • 0
    @ Удивительно. Ах, я забыл изменить numbers на salaries в условии цикла for и в теле оператора if в дополнение к условию оператора if. Я соответственно отредактировал свой ответ, и теперь код должен быть функциональным.
1
let salaries = [59360, 37012, 30301, 39738, 39169, 52832, 42132, 41220, 36901, 54497, 53108, 32553, 43023, 51505, 31499]

Вы можете сначала отфильтровать номера, которые вас интересуют.

Например, цифры, превышающие 30000

const numberFilter = 30000
let salaries = salaries.filter(salary => salary > numberFilter)

Затем суммируйте их:

const salariesSum = salaries.reduce((prev, current) => prev + current)

Или oneliner:

const numberFilter = 30000
const salariesSum = salaries.filter(salary => salary > numberFilter).reduce((a, b) => a + b)
0

Вы можете использовать фильтр и уменьшить прототипы Array, чтобы создать сумму. Вам также необходимо подключить прослушиватель событий к select, иначе ваш скрипт будет выполняться только один раз с начальным значением select.

var salaries = [59360, 37012, 30301, 39738, 39169, 52832, 42132, 41220, 36901, 54497, 53108, 32553, 43023, 51505, 31499];

document.getElementById('filter').addEventListener('change', event => {
  var filteredSalaries = salaries.filter(salary => { return salary > event.target.value });
  var sum = filteredSalaries.reduce( (salary, total) => { return total + salary}, 0);
  
  console.log('sum', sum);
  console.log('salaries greater than filter', filteredSalaries);
  document.getElementById('result').value = sum;
});
<select id='filter' name=''>
  <option value = '0'>0</option>
  <option value = '30000'>30000</option>
  <option value = '35000'>35000</option>
  <option value = '40000'>40000</option>
  <option value = '45000'>45000</option>
  <option value = '50000'>50000</option>
  <option value = '55000'>55000</option>
</select>

<input id="result" value="" />
0

Похоже, вам просто нужно ссылаться на ваш массив salaries вместо numbers, поскольку numbers не объявлены. Затем вам нужно добавить некоторую логику сравнения, чтобы получить то, что больше, чем номер фильтра.

var salaries = [59360, 37012, 30301, 39738, 39169, 52832, 42132, 41220, 36901, 54497, 53108, 32553, 43023, 51505, 31499];

document.getElementById('go').onclick = function () {

   var numberFilter = document.getElementById('filter').value;

   var total = 0;
   for (index = 0; index < salaries.length; index++) {

      if (salaries[index] > numberFilter) {
         total = total + salaries[index];
      };

   };
   //Write the result after the loop is complete
   document.getElementById('result').value = total;
 };
-2

Я рекомендую добавить обработчик события onclick непосредственно к элементу кнопки "go" и вызвать следующую функцию (я также добавил счет как часть вычислений).

<script type="text/javascript" language="javascript">

    var salaries = [59360, 37012, 30301, 39738, 39169, 52832, 42132, 41220, 36901, 54497, 53108, 32553, 43023, 51505, 31499];

    function performCalc()
    {
        var listElem = null;
        var selectedValue = 0;
        var index = 0;
        var total = 0;
        var count = 0;
        var resultElem = null;
        var countElem = null;

        try
        {
            listElem =  document.getElementById("filter");

            if(listElem!=null)
            {
                selectedValue = parseInt(listElem.options[listElem.selectedIndex].value);

                for (index = 0; index < salaries.length; index++) 
                {
                    if (salaries[index] > selectedValue) 
                    {
                    total += salaries[index];
                    count++;
                    }
                }

                resultElem = document.getElementById("result");
                resultElem.value = total.toString();

                countElem = document.getElementById("count");
                countElem.value = count.toString();
            }
        }
        catch(e)
        {
            alert("performCalc Error:  " + e.Message);
        }
        finally
        {

        }

    }
</script>

<button id = 'go' class = '' onclick="performCalc()">GO</button>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню