diff --git a/README.md b/README.md index e8088ff33..b778a14b2 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,7 @@ * [Initialize array with values](#initialize-array-with-values) * [Last of list](#last-of-list) * [Measure time taken by function](#measure-time-taken-by-function) +* [Median of array of numbers](#median-of-array-of-numbers) * [Object from key value pairs](#object-from-key-value-pairs) * [Pipe](#pipe) * [Powerset](#powerset) @@ -359,6 +360,20 @@ const timeTaken = (func,...args) => { // timeTaken(Math.pow, 2, 10) -> 1024 (0.010000000009313226 logged in console) ``` +### Median of array of numbers + +Find the middle of the array, use `Array.sort()` to sort the values. +Return the number at the midpoint if `length` is odd, otherwise the average of the two middle numbers. + +```js +const median = arr => { + const mid = Math.floor(arr.length / 2), nums = arr.sort((a,b) => a - b); + return arr.length % 2 !== 0 ? nums[mid] : (nums[mid - 1] + nums[mid]) / 2; +} +// median([5,6,50,1,-5]) -> 5 +// median([0,10,-2,7]) -> 3.5 +``` + ### Object from key-value pairs Use `Array.reduce()` to create and combine key-value pairs. diff --git a/snippets/median-of-array-of-numbers.md b/snippets/median-of-array-of-numbers.md index 0a9c4eab2..3a675a545 100644 --- a/snippets/median-of-array-of-numbers.md +++ b/snippets/median-of-array-of-numbers.md @@ -1,17 +1,13 @@ ### Median of array of numbers -Find the middle index of an array and sort the numbers in ascending order. If the length of the array is odd, -return the number at the midpoint, otherwise return the average of the two middle numbers. +Find the middle of the array, use `Array.sort()` to sort the values. +Return the number at the midpoint if `length` is odd, otherwise the average of the two middle numbers. ```js -const median = numbers => { - const midpoint = Math.floor(numbers.length / 2); - const sorted = numbers.sort((a, b) => a - b); - - return numbers.length % 2 - ? sorted[midpoint] - : (sorted[midpoint - 1] + sorted[midpoint]) / 2; -}; +const median = arr => { + const mid = Math.floor(arr.length / 2), nums = arr.sort((a,b) => a - b); + return arr.length % 2 !== 0 ? nums[mid] : (nums[mid - 1] + nums[mid]) / 2; +} // median([5,6,50,1,-5]) -> 5 // median([0,10,-2,7]) -> 3.5 ```