如何使用Javascript或Jquery获取数组中最高5个值的总和?
我有一个6个值的数组,其中第6个值是可选的(即,如果用户没有输入第6个值,则将计算前5个值)。我想对其中最高的5个值求和 我的Javascript代码:如何使用Javascript或Jquery获取数组中最高5个值的总和?,javascript,jquery,Javascript,Jquery,我有一个6个值的数组,其中第6个值是可选的(即,如果用户没有输入第6个值,则将计算前5个值)。我想对其中最高的5个值求和 我的Javascript代码: function calculate_merit_point(){ var s1 = eval(document.getElementById('sub_no1').value); var s2 = eval(document.getElementById('sub_no2').value); var s3 = eval(d
function calculate_merit_point(){
var s1 = eval(document.getElementById('sub_no1').value);
var s2 = eval(document.getElementById('sub_no2').value);
var s3 = eval(document.getElementById('sub_no3').value);
var s4 = eval(document.getElementById('sub_no4').value);
var s5 = eval(document.getElementById('sub_no5').value);
var s6 = eval(document.getElementById('sub_no6').value);
var vals = [s1,s2,s3,s4,s5,s6];
function arraySum(arr) {
if (!arr) {
return false;
} else {
var sum = 0;
for (var i = 0, len = arr.length; i < len; i++) {
sum += arr[i];
}
return sum;
}
}
sum = arraySum(vals.sort(function(a, b) {
return b - a;
}).slice(0, 5));
if(isNaN(tt)){
$('#agr').text('0');
} else {
$('#agr').text(sum);
}
}
它应该是31+32+33+34+35=165
。但它显示的是162的值
根据我的要求(第6个值可选),如果我没有给s6
任何值,它将显示值228
我已经尝试过了,但是如果我没有给出第6个(可选)值,它将显示值0
。如果我在s6中给出值35,它显示的是总和值233
我该怎么办?
更新和解决 我的代码是正确的。但是代码
eval()
出现了问题。我将其替换为Number()
,并解决了问题
谢谢大家。您可以使用
reduce
更轻松地求和,并使用Math.max
使用以下ES6代码减去最大值:
var-vals=[30,31,32,33,34,35,36];
//求和
var总和=VAL.减少((a,b)=>a+b,0);
//减去最高值
如果(vals.length==6)和-=Math.max(…vals);
//输出结果
控制台日志(总和)代码>这将是使用.reduce
的绝佳机会。它将返回给定数组的单个值。当我们在数组中“循环”时,我们将确定最低值,然后从结果中减去该值。另外,很明显,您正在使用jQuery应用.text()
,因此,您也可以使用它来获取每个输入的.val()
。然后我们将使用parseInt
并进行检查,以在出现错误/无效结果时返回0
HTML
<input id="sub_no1" value="30" />
<input id="sub_no2" value="31" />
<input id="sub_no3" value="32" />
<input id="sub_no4" value="33" />
<input id="sub_no5" value="34" />
<input id="sub_no6" value="35" />
<p id="agr"></p>
JS
$(function() {
function calculate_merit_point() {
var s1 = getValue($('#sub_no1'));
var s2 = getValue($('#sub_no2'));
var s3 = getValue($('#sub_no3'));
var s4 = getValue($('#sub_no4'));
var s5 = getValue($('#sub_no5'));
var s6 = getValue($('#sub_no6'));
var vals = [s1, s2, s3, s4, s5, s6];
function getValue(el) {
return parseInt(el.val(), 10) || 0;
}
function arraySum(arr) {
if (!arr) {
return 0;
} else {
var lowest = Infinity;
return vals.reduce(function(sum, val) {
if (val < lowest){ lowest = val; }
return sum + val;
}, 0) - lowest;
}
}
$('#agr').text(arraySum(vals));
}
calculate_merit_point();
})
$(函数(){
函数计算_优点_点(){
var s1=getValue($('sub#u no1');
var s2=getValue($('sub#u no2');
var s3=getValue($('sub#u no3');
var s4=获取值($('sub#u no4');
var s5=获取值($('sub#u no5');
var s6=getValue($('sub#u no6');
var VAL=[s1、s2、s3、s4、s5、s6];
函数getValue(el){
返回parseInt(el.val(),10)| 0;
}
函数arraySum(arr){
如果(!arr){
返回0;
}否则{
var最低=无穷大;
返回val.REDUCT(函数(总和,val){
如果(val
这是最糟糕的提问方式之一。对于这些值,它显示165:如果显示162,则问题在其他地方。@Raj,不要以“请不要将此问题标记为重复”开头。单是这一点就已经吸引了反对票。如果你写了一个好问题,你就更有可能得到答案。你不能仅仅说“不要关闭这个”就阻止关闭。这不会有什么帮助,只会惹恼人们。
$(function() {
function calculate_merit_point() {
var s1 = getValue($('#sub_no1'));
var s2 = getValue($('#sub_no2'));
var s3 = getValue($('#sub_no3'));
var s4 = getValue($('#sub_no4'));
var s5 = getValue($('#sub_no5'));
var s6 = getValue($('#sub_no6'));
var vals = [s1, s2, s3, s4, s5, s6];
function getValue(el) {
return parseInt(el.val(), 10) || 0;
}
function arraySum(arr) {
if (!arr) {
return 0;
} else {
var lowest = Infinity;
return vals.reduce(function(sum, val) {
if (val < lowest){ lowest = val; }
return sum + val;
}, 0) - lowest;
}
}
$('#agr').text(arraySum(vals));
}
calculate_merit_point();
})