下面列出的 median javascript 代码的正确解释

Proper explanation of median javascript code listed below

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

   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;
   }

如果您在 array.sort 之后放置一个 console.log(array) 以更好地形象化它实际上会有所帮助:

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 是:

The median is the value separating the higher half from the lower half of a data sample. For a data set, it may be thought of as the "middle" value. For example, in the data set {1, 3, 3, 6, 7, 8, 9}, the median is 6, the fourth largest, and also the fourth smallest, number in the sample

所以首先必须对数组进行排序,这样我们才能找出最小的数字和最大的数字。然后我们找出数组的中间。之后,我们通过使用 % modulus operator => (5/2)%1 将是 0.5 ,其中 (4/2)%1 将是 0 和基于此,我们 select 从数组中按索引找到正确的项目(注意数组索引从 0 开始)。

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

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

[1,2,3,4] 的情况下,中位数将为 2.5,因为模数将为 return 0,我们将转到 else ternary operator 即:

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

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

希望这能解决问题。