Правильное объяснение среднего кода JavaScript, приведенного ниже - PullRequest
0 голосов
/ 29 мая 2019

Я просто ищу подробное объяснение кода, указанного ниже?Я понимаю, как работает медиана, но не уверен, почему этот формат правильно находит медиану каждый раз.

   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 голосов
/ 29 мая 2019

На самом деле было бы полезно, если бы вы поставили 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, и мы перейдем к else троичного оператора , который равен:

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

Что в нашем случае будет означать (array[2-1] + array[2]) / 2, что при замене значений из индексов массива будет (2+3)/2 = 2.5

Надеюсь, это все прояснит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...