[英]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.