繁体   English   中英

javascript找到数组值的总和

[英]javascript find sum of array values

我有一个选择工资列表,我试图找到所有数组值的总和大于从列表中选择的值。 我无法获取输出总和的代码。

 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> 

看起来有一些事情需要改变:

  • 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;

};
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)

看起来您只需要引用您的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;
 };

您可以使用过滤器reduce数组原型来创建总和。 您还需要将一个事件侦听器附加到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="" /> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM