На самом деле было бы полезно, если бы вы поставили 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
Надеюсь, это все прояснит.