Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
feat: implemention of sort method
  • Loading branch information
jscodelover committed Nov 9, 2019
commit 85f4b1e035fec48d7ca66a9915c220d2f3d864a2
47 changes: 47 additions & 0 deletions src/utils/custom_method.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,53 @@ export const custom_method = {
<p>}</p>
<p>return true;</p>
<p>};</p>`,
mySort: `<p>Array.prototype.mySort = function(compareFn) {</p>
<p>return mergeSort(this);</p>
<p>// Split the array into halves and merge them recursively</p>
<p>function mergeSort(arr) {</p>
<p>if (arr.length === 1) {</p>
<p>// return once we hit an array with a single item</p>
<p>return arr;</p>
<p>}</p>
<p>const middle = Math.floor(arr.length / 2); // get the middle item of the array rounded down</p>
<p>const left = arr.slice(0, middle); // items on the left side</p>
<p>const right = arr.slice(middle); // items on the right side</p>
<p>return merge(</p>
<p>mergeSort(left),</p>
<p>mergeSort(right)</p>
<p>);</p>
<p>}</p>
<p>// compare the arrays item by item and return the concatenated result</p>
<p>function merge(left, right) {</p>
<p>let result = [];</p>
<p>let indexLeft = 0;</p>
<p>let indexRight = 0;</p>
<p>while (indexLeft < left.length && indexRight < right.length) {</p>
<p>let _left = left[indexLeft];</p>
<p>let _right = right[indexRight];</p>
<p>if (compareFn)</p>
<p>compareFn = composeCompareFn(compareFn(left, right));</p>
<p>compareFn = (l, r) => l < r</p>
<p>if (compareFn(_left, _right)) {</p>
<p>result.push(left[indexLeft]);</p>
<p>indexLeft++;</p>
<p>} else {</p>
<p>result.push(right[indexRight]);</p>
<p>indexRight++;</p>
<p>}</p>
<p>}</p>
<p>return result.concat(left.slice(indexLeft)).concat(right.slice(indexRight));</p>
<p>}</p>
<p>function composeCompareFn(compareResult) {</p>
<p>if (Math.sign(compareResult) == -1)</p>
<p>return false;</p>
<p>if (Math.sign(compareResult) == 1)</p>
<p>return true;</p>
<p>if (compareResult == 0)</p>
<p>return false;</p>
<p>}</p>
<p>}</p>
`,
myFrom: `<p>Array.myFrom = function(data){</p>
<p>const result = [];</p>
<p>for(let i = 0; i < data.length; i++)</p>
Expand Down