Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Javascript或Jquery获取数组中最高5个值的总和?_Javascript_Jquery - Fatal编程技术网

如何使用Javascript或Jquery获取数组中最高5个值的总和?

如何使用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

我有一个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(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();
})