JQuery:将数字乘以单独的数组,然后得到结果的总和

时间:2016-02-29 12:52:56

标签: javascript jquery arrays forms multiplication

我有一个页面,允许学生计算他们的加权平均值。它通过学生在两个单独的表单字段中添加其成绩来工作,然后他们可以根据需要添加多行表单字段。基本计算是:(ECTS *等级)的总和/(ECTS)的总和。

(注意:页面是丹麦文,所以有些语言不是英文。)

现在我用PHP进行计算,它们看起来像这样:

if($_POST['karakter'])
{
$karakter=$_POST['karakter'];
}
if($_POST['ects'])
{
$ects=$_POST['ects'];
$samletects = array_sum($ects);
}
for($i = 0; $i < count($karakter); $i++) {
    $result[] = $karakter[$i] * $ects[$i];
}
    $samletv = array_sum($result);
    $fulderesultat = ($samletv/$samletects);
    $afrundet = round($fulderesultat, 2);
if($_POST['karakter'])
{
echo "<h4>Dit vægtede gennemsnit er:</h4><p class='resultatet'>" . $afrundet . "</p>";
} else {
  echo "<h4>Dit vægtede gennemsnit er:</h4><p class='resultatet'>?</p>";
}

但是我希望能够实时进行计算,这样您每次进行计算时都不会丢失添加到表单中的等级。

这个小提琴显示了我如何添加表单字段 http://jsfiddle.net/Chrintz/sv513b5r/26/

现在看来的页​​面: http://snittet.dk/

我的问题和问题是我如何在Jquery而不是PHP中进行计算。我已经弄清楚如何获得ECTS数组的总和:

http://jsfiddle.net/Chrintz/omccrobs/

但我无法弄清楚如何做这个部分: (ECTS *成绩)总和

将一个数组的数字与另一个数组的相应数字相乘,然后得到新数组的数字之和。

我基本上需要帮助的是,创建两个数组,一个包含成绩,一个包含ECTS。然后我想将相应的值相乘,从而创建第三个数组。然后我想要将第三个数组的值加起来并除以ects数组的相加值

1 个答案:

答案 0 :(得分:3)

这里有许多(客户端)解决方案。例如:将输入元素转换为function my_gravatar_url() { // Get user email $user_email = get_the_author_meta('user_email'); // Convert email into md5 hash and set image size to 80 px $user_gravatar_url = 'http://www.gravatar.com/avatar/' . md5($user_email) . '?s=120'; echo $user_gravatar_url; } <div class="author" style="background: url('<?php echo my_gravatar_url(); ?>') center center no-repeat; top: 50%; left: 50%;"> </div> 个元素,并应用const进行计算。

类似(自动计算价值变化):

&#13;
&#13;
Array
&#13;
Array.map/Array.reduce
&#13;
calculate();

// autocalculate
$('body').on('keyup', 'input', calculate);

function calculate(e) {
  var grades    = $('#grades input').toArray();
  var ects      = $('#ects input').toArray();
  
  // calculate values
  var totalEcts = ects.map( function (ectsInput) {return +ectsInput.value || 0;} )
                      .reduce( function (p, n) {return p + n;}, 0 );
  var meanGrade = grades
                   .map( function (gradeInput) {return +gradeInput.value || 0;} )
                   .reduce( function (p, n) {return p+n;}, 0 ) / grades.length;
  var weighted  = grades
                   .map( 
                    function (gradeInput, i) {
                      return (+gradeInput.value || 0) * (+this[i].value || 0);
                    }, ects)
                   .reduce( function (p, n) {return p + n;}, 0 ) / 
                      (totalEcts > 0 ? totalEcts : 1) // avoid division by zero
  
  // display calculated values
  $('#meanGrade').html( 'mean: ' + meanGrade.toFixed(2) );
  $('#totalECTS').html( 'total: ' + totalEcts );
  $('#weightedMean').html( 'sum(grade * ects) / sum(ects): ' + weighted.toFixed(2));
}
&#13;
&#13;
&#13;

顺便说一句:我无法通过(ECTS *成绩)总和来弄清楚你的意思。你能详细说明吗?我在教育方面工作,并且不知道任何像这样计算的司法系统。

相关问题