Javascript 中位数计算器

Javascript median calculator

我有 this JavaScript 计算 4 个给定数字的总和和平均值。

我想让它再做两件事:

  1. 让它也计算并显示这些数字的中位数
  2. 我不希望它为 4 个数字使用 4 个输入字段,而是使用一个字段,我们可以在其中添加任意数量的数字(最少 2 个),用逗号分隔。

我发现了一些与此事相关的其他问题,但与 JavaScript 实施无关。

function doSums(what) {
    var df = document.forms[0];
    var a = parseFloat(df[0].value);
    var b = parseFloat(df[1].value);
    var c = parseFloat(df[2].value);
    var d = parseFloat(df[3].value);
    if ((isNaN(a)) || (isNaN(b)) || (isNaN(c)) || (isNaN(d))) {
        alert("four numbers please !");
        df.reset();
        df[0].focus();
        return;
    }
    if (what == "total") {
        df[5].value = a + b + c + d;
    } else {
        df[7].value = (a + b + c + d) / 4;
    }
}

JSFiddle

您不应创建函数 onLoad 事件,而应将其包含在 <script> function doSum(what){ ... } </script>

内的 <head> 标记中

JsFiddle

要使用单个输入执行此操作:

  1. split 逗号上的输入值。这将 return 一个数字数组。
  2. 使用 for loop 遍历数组,跟踪 运行 总数。
  3. 平均值将是总计除以数组的长度。

计算中位数:

  1. 按数字对数组进行排序。
  2. 如果有奇数个值,使用中间的那个。否则,取中间两个的平均值。

此代码段执行上述操作,此外还包括错误检查。请注意,我将操作数乘以 1 以将它们转换为数字,而不是使用 parseFloat。此外,我的 floorceil 逻辑会自动处理操作数为奇数或偶数的情况。

document.querySelector('#equation').addEventListener('change',function() {
  var ops= this.value
             .split(',')
             .sort(function(a,b){return a-b}),
      len= ops.length,
      valid= true,
      total = 0,
      i,
      error= document.querySelector('#error'),
      stotal= document.querySelector('#total'),
      smean= document.querySelector('#mean'),
      smedian= document.querySelector('#median');
  
  if(len < 2) valid= false;
  else {
    for(i = 0 ; i < len ; i++) {
      if(isNaN(ops[i])) valid= false;
      else total+= ops[i]*1;
    }
  }
  if(!valid) {
    error.style.display= 'block';
    stotal.innerHTML= smean.innerHTML= smedian.innerHTML= '';
  }
  else {
    error.style.display= 'none';
    stotal.innerHTML= total;
    smean.innerHTML= total/len;
    smedian.innerHTML= 
      (ops[Math.floor((len-1)/2)]*1 + ops[Math.ceil((len-1)/2)]*1)/2;
  }
});
body {
  font: 14px verdana;
}

#error {
  color: red;
  display: none;
}
Enter at least two numbers, separated by commas:<br>
<input id="equation" type="text">
<div id="error">Invalid input</div>
<div>Total: <span id="total"></span></div>
<div>Mean: <span id="mean"></span></div>
<div>Median: <span id="median"></span></div>