以下列出的中值JavaScript代码的正确解释

时间:2019-05-29 20:16:06

标签: javascript arrays sorting median

我只是在寻找下面列出的代码的可靠解释?我了解中位数的工作原理,但不确定为什么这种格式每次都能正确找到中位数。

   function median(array) {
  array.sort(function(a, b) {
  return a - b;
  });
  var middle = array.length / 2;
  return middle % 1 ? array[middle - 0.5] : (array[middle - 1] + 
  array[middle]) / 2;
   }

1 个答案:

答案 0 :(得分:0)

如果您将console.log(array)后面的array.sort放在更好的位置可以看到,这实际上会有所帮助:

function median(array) {
  array.sort(function(a, b) {
    return a - b;
  });
  console.log(array)  // <-- so you can see the sorted array
  var middle = array.length / 2;
  return middle % 1 ? array[middle - 0.5] : (array[middle - 1] + array[middle]) / 2;
}

console.log(median([5,4,3,2,1]))

根据定义median是:

  

中位数是将上半部分与下半部分分开的值   数据样本。对于数据集,可以将其视为“中间”   值。例如,在数据集{1、3、3、6、7、8、9}中,中位数   是6,是第四大数字,也是第四小数字   样本

因此,首先必须对数组进行排序,这样我们才能确定哪个是最小的,哪个是最大的数字。然后我们找出数组的中间。之后,我们只需使用% modulus operator => (5/2)%1将是0.5来检查长度是偶数还是奇数,其中(4/2)%1将是0,然后基于此,我们从数组中按索引选择适当的项(注意数组索引从0开始)。

让我们以[5,4,3,2,1]数组为例:

排序为[1,2,3,4,5],数组divided by 2长度的其余部分为2.5,而模数1的含义为0.5。因此,在这种情况下,我们将从数组中选择array[middle-0.5]值,这意味着array[2.5-0.5]将是2。我们在索引2处的数组的值为3,因此该数组的中位数为3

[1,2,3,4]的情况下,中位数为2.5,因为模量将返回0,我们将转到ternary operatorelse,是:

(array[middle - 1] + array[middle]) / 2

在我们的情况下,这意味着(array[2-1] + array[2]) / 2,当我们替换数组索引中的值时将是(2+3)/2 = 2.5

希望可以清除它。